C语言,假设x,y是整数,编写程序求X的y次方的最后三位数,要求x、y从键盘输入。

2025-04-09 05:17:15
推荐回答(3个)
回答1:

数字太大会溢出,结果肯定会错了。

这道题是算法题,不能蛮算的,它有规律:

乘积的最后三位值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。

从这入手写就没问题了。

#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;
}

回答2:

#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亿多点)

回答3:

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;
}