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

#include<stdio.h>#include<math.h>voidmain(){inti,x,y,z;doubles;scanf("%d,%d",&x,&y);z... #include<stdio.h>
#include<math.h>
void main()
{
int i,x,y,z;
double s;
scanf("%d,%d",&x,&y);
z=pow(x,y);
for(i=0;i<3;i++)
{
s=z%10;
z=z/10;
printf("%d",z);
}

}

这个程序的运行结果为000, 从pow那里就出问题了,pow(x,y)的结果也是000.
展开
 我来答
狄懋E
2014-05-10 · TA获得超过114个赞
知道答主
回答量:75
采纳率:0%
帮助的人:50.5万
展开全部

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

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

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

从这入手写就没问题了。

#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;
}
bhtzu
推荐于2017-11-26 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4017万
展开全部
#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的回答是题目的正解,采纳给他吧。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dreambox007
2014-05-10 · TA获得超过416个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:255万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式