首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求13的13次幂的结果的前3位该如何算啊

2012-02-07 
求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应该是非常非常大的。

热点排行