正整数M 的N次方有可能是一个非常大的数字,我们只求该数字的最后三位
例1:
比如输入5和3 ,5的3次方为125,则输出为125
例2:
比如输入2和10 2的10次方为1024 ,则输出结果为24
例3:
比如输入111和5 111的5次方为116850581551,则输出结果为551
方法一:
因为m是比较大的数,n次方之后有可能会超出范围,我们可以利用大树相乘的方法:将数字看成一串字符串,按位相乘。但这种方法较繁琐。因为只取最后三位,我们每进行一次乘法就模1000,只留最后三位数即可。
int last_three_number(unsigned int m,unsigned int n) { if(0==n) return 1; if(0==m) return 0; unsigned int i=0,result=1; for(;i<n;i++) { result*=m; if(1000<=result) { result%=1000; } } return result; }方法二:
二分求幂,在方法一的基础上,乘法不再是m*m。而是m的n/2次幂乘以m的n/2次幂。
代码如下:
int last_three_number1(unsigned int m,unsigned int n) { if(0==n) return 1; if(0==m) return 0; unsigned int i=0,result=1; while(n!=0) { if(n%2==1) result=(result*m)%1000; m=(m*m)%1000; n/=2; } return result; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/sinat_24520925/article/details/46732497