• 每日一小练——数值自乘非递归解


    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练!


    题目:数值自乘非递归解


    内容:

    连续求m^n问题(m与n是正整数)。前面的提示会得到一个递归程序,请编写一个运算效率相同高的非递归的程序。

    我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神。。奥,不正确就攻克了!假设是非递归事实上一种简单的方法就是把,

    递归的几种分类做好if分支,用一个循环处理就好了,只是假设我们认真思考m^n这个式子,我们会发现n假设用二进制表示的话如:2^7可改写为

    2^0111即为2^(2^0) x 2^(2^1) x 2^(2^2) ,所以事实上所用的数都能用这种方式表示的:i1*m^(2^0)+i2*m^(2^1)+.... 

    而m^(2^(i+1))=m^(2^i*2)=(m^(2^i))^2=m^(2^i)*m^(2^i)所以我们就能够利用这些原理进行循环了。

     

    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	unsigned long int recursion(unsigned long int base, unsigned long int index);
    	unsigned long int base, index;
    	cout << "请输入底数:" << endl;
    	cin >> base;
    	cout << "请输入指数:" << endl;
    	cin >> index;
    	cout << base << "的" << index << "次方为:" << recursion(base, index) << endl;
    	getchar();
    	getchar();
    	return 0;
    }
    
    unsigned long int recursion(unsigned long int base, unsigned long int index)
    {
    	unsigned long int temp = 1;
    	while (index > 0)
    	{
    		if (index & 0x01 == 1)
    			temp *= base;
    		base *= base;
    		index >>= 1;
    	}
    	return temp;
    }

    实验结果:



    欢迎大家增加每日一小练,嘿嘿!

    每天练一练,日久见功夫,加油!


                -End-

    參考文献:《c语言名题精选百则》


  • 相关阅读:
    NHibernate初学遇到的问题及解决方案之一
    MSSQL2005数据库备份时提示:System.Data.SqlClient.SqlError: 媒体集有 2 个媒体簇,但只提供了 1 个。 .
    VS自带的ASP.NET web服务器Cassini源代码
    Python开发WebService使用soaplib库
    vue入门创建项目
    vue回顾Object.defineproperty方法
    虚拟机ping不通百度的解决方案
    zookeeper完全分布式环境部署
    vue+echarts生成图表步骤
    虚拟机时间同步
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4365923.html
Copyright © 2020-2023  润新知