C语言的一道题 求指点
发布网友
发布时间:2023-05-03 11:40
我来回答
共2个回答
热心网友
时间:2023-05-07 02:54
第一个代码, 你需要知道double每个数字都是近似存储的,虽然有前若干位是准确数字的说法,但实际上除了恰好是2^n组合的加法情况,其他的多少都会有一些近似.
这样在大量计算累积下来就会导致精度丢失的扩大. 最终导致结果错误.
第二个代码.
如果把c改成int应该是可以过的.
现在c是short 这样在做c=c*a; 的时候就可能会溢出.
比如 a=999; 计算第二次的时候 c=998001, 但最大值只是32767,所以实际上得到的c值是14961 取余后结果是961,明显和正确答案001差太多了.
热心网友
时间:2023-05-07 02:55
#include <stdio.h>
int main()
{int n,a,b,c;
scanf("%d",&n);
for(;n>=1;n--)
{
scanf("%d%d",&a,&b);
for(c=1;b>=1;b--)
c=c*a%1000;
printf("%d\n",c);
}
return 0;
}