C语言,假设x,y是整数,编写程序求X的y次方的最后三位数,要求x、y从键盘输入。
发布网友
发布时间:2022-05-26 21:54
我来回答
共3个回答
热心网友
时间:2023-11-06 07:16
数字太大会溢出,结果肯定会错了。
这道题是算法题,不能蛮算的,它有规律:
乘积的最后三位值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
从这入手写就没问题了。
#include <stdio.h>//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;
}
热心网友
时间:2023-11-06 07:16
#include<stdio.h>
#include<math.h>
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亿多点)
追问刚才我用我的那个程序算pow(x,y)是算不出的,为什么你这个就能算出来了。
追答
你不是pow算不出来,而是后面计算和输出错误。对比一下代码就知道了
这是你源程序的调试效果,pow没问题,是后面代码问题。
另外,balingybj的回答是题目的正解,采纳给他吧。
热心网友
时间:2023-11-06 07:17
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;
}