C语言数据溢出问题

2024-12-01 04:06:58
推荐回答(5个)
回答1:

在C语言中,数据的存储就像一个圆圈,正数溢出数据就会从最小负数开始,负数溢出数据同理,打个比方(简略写一下):
int a=32768,b=-32769;
printf("a=%d,b=%d",&a,&b);
则会输出a=-32768,b=32767;
这样则50000输出就是(50000-32767)+(-32768)+(-1)=-15536

回答2:

一楼的方法可行,用的是高精度整数的方法。
但是但是。。。这题明显考的是数论中的【同余】的知识哦!
计算1000^10 % 1000 ,
1)可以先把 1000 的 10 次方计算出来,再和 1000 求余。很明显,这样【计算的中间结果】会【超出 int 的表示范围】,这样就需要用到【高精度整数】。
2)也可以一边【计算 1000 的 10次方】【一边和1000 求余】,这样的结果和(1)是相同的。
但是很明显,这样【计算的中间结果】【不会超出 int 的表示范围】,最大的【计算的中间结果】一定是【小于余数】的,也就是小于 1000 的,不需要【高精度整数】。

即:
1000^10 % 1000
= 1000 * 1000 * ... * 1000 % 1000 (方法1)
= 1000 % 1000 * 1000 % 1000 * 1000 % 1000 ... *1000 % 1000(方法2)

#include
int main()
{
int a,n,i=1,k,l,m,p;
long j=1;
scanf("%d %d",&a,&n);
while (i<=n)
{
// 方法1
//j*=a;

// 方法2
j=(j*a)%1000;

i++;
}
k=j%1000/100;
l=j%100/10;
m=j%10;
p=k*100+l*10+m;
printf("The last 3 numbers is %d.\n",p);
}

回答3:

你是想求阶层。。。20阶层到int型不会溢出呀。。。32位。大的很

回答4:

是倒数第三行还是倒数第二行啊!a=-15536吧!你是用tc做还是c++啊!如果是c++的话,那a=50000.如果是Tc的话,那就是-15536.具体是怎么做的,那你就的要找老师或是C语言好的人啊!因为网上不好讲啊!

回答5:

老实说没看到你说的-15536.。