数字太大会溢出,结果肯定会错了。
这道题是算法题,不能蛮算的,它有规律:
乘积的最后三位值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
从这入手写就没问题了。
#include//n次方的后三位数
int main ()
{
int x,y,i,last;
last=1; //记得初始化
scanf ("%d%d",&x,&y);
for (i=1;i<=y;i++)
{
last=last*x%1000;
}
if (last==0)
printf ("%d%d%d\n",last,last,last); //以三个零结尾
else
printf ("%d\n",last);
return 0;
}
#include
#include
void main()
{
int i,x,y,z;
int s[3];
scanf("%d,%d",&x,&y);
z=pow(x,y);
for(i=0;i<3;i++)
{
s[i]=z%10;
z=z/10;
//printf("%d",s);
}
for(i=3;i>0;i--)//逆序
printf("%d",s[i-1]);
}
按照你的程序改的。
%d不能输出浮点数。
这个程序的问题在于取值范围受到int的限制(32位,20亿多点)
void main()
{
int i,x,y,z;
double s;
scanf("%d,%d",&x,&y);
z=pow((double)x,(double)y);
s=z%1000;
printf("%d",(int)s);
return;
}