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. 展开
#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. 展开
展开全部
数字太大会溢出,结果肯定会错了。
这道题是算法题,不能蛮算的,它有规律:
乘积的最后三位值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
从这入手写就没问题了。
#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;
}
展开全部
#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)是算不出的,为什么你这个就能算出来了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询