|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
int main()
{
long int x,y,z;
long int a;
printf("请输入整数x,y(例2 3): ");
scanf("%d %d",&x,&y);
z = pow(x,y);
printf("%ld\n",z);
a = z % 1000;
printf("%ld",a);
return 0;
}
题目是球x的y次方的最后三位数,题目没有报错,但是如果我输入 13 20,答案z=-2147483648 最后三位a=-648,正确答案应该是801;
但是如果我输入2 9 运行结果是512 是正确的,我想知道是哪个地方出错了!?
你的程序中存在几个问题。首先,你需要使用%ld而不是%d来读取long int类型的变量。其次,pow函数在计算时使用的是浮点数,这可能导致精度丢失和错误的结果。下面是修改后的代码:
- #include <stdio.h>
- int main()
- {
- long int x, y, z;
- long int a;
- printf("请输入整数x,y(例2 3): ");
- scanf("%ld %ld", &x, &y);
- z = 1;
- for (int i = 0; i < y; i++)
- {
- z *= x;
- z %= 1000;
- }
- printf("%ld\n", z);
- a = z % 1000;
- printf("%ld", a);
- return 0;
- }
复制代码
在这个修改后的程序中,我们使用了一个循环来计算x的y次方,同时在循环中对结果取模1000,以避免溢出和精度丢失问题。
现在,如果你输入13和20,你将得到正确的答案:801。
|
|