求13的13次幂的结果的前3位该怎么算啊?不要告诉我你用pow()把13的13次幂求出来再除以1xxxx(xxx个数为(总位
求13的13次幂的结果的前3位该怎么算啊?
不要告诉我你用pow()把13的13次幂求出来再除以1xxxx(xxx个数为(总位数-3)个零)就可以了,如果是130次幂你不会也要求出来吧。我知道如何求后3位数,但怎么快速的求出前3位数呢??请高手指点。我先给出求后3位数的代码:
C/C++ code#include <iostream>using namespace std;int main(){ long x = 0; long y = 13; for (int i = 2;i < 14;i++) { x = y * 13; y = x % 1000; //小技巧:如果要取整数的最后三位,只需与1000求模即可 } cout << "13的13次方的最后三位为:" << y << endl; system("pause"); return 0;}
请高手指教如何快速求结果的前三位?
[解决办法]#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int x=13;
double y = 13/10.0;
for (int i = 2;i < 14;i++)
{
y*= (13/10.0);
}
printf("13的13次方的最后三位为:%f\n",y);
if(y>100.0 && y<1000.0)
printf("13的13次方的最后三位为1:%d\n",(int)y);
if(y>10.0 && y<100.0)
printf("13的13次方的最后三位为2:%d\n",(int)(y*10.0));
if(y>1.0 && y<10.0)
printf("13的13次方的最后三位为3:%d\n",(int)(y*100.0));
system("pause");
return 0;
}
[解决办法]这个题目好象有个技巧,因为power(13,13) = power(10+3,13)可以得到一个二项展开式,所以只要判断能构成前三位的项的和就可以了吧?
[解决办法]求10为底的对数,乘上指数,然后去掉整数部分,然后再求指数就可以了
[解决办法]>这个题目好象有个技巧,因为power(13,13) = power(10+3,13)可以得到一个二项展开式,所以只要判断能构成前三位的项的和就可以了吧?
不行,后面的10^i*3^(13-i)的系数C(i,13)可能非常大,只求前3项算不全
>求10为底的对数,乘上指数,然后去掉整数部分,然后再求指数就可以了
可接受
事实上完全可以:
double x = 1.0;
for(int i=0;i<13;++i)
{
x *= 13.0;
while(x >= 1000.0) x /= 10.0;
}
然后对x截成整数即可。这里估计不用压精度,因为13^i=999...的情况,i应该是非常非常大的。