【发布时间】:2017-06-22 15:55:30
【问题描述】:
int get_dnum(long long ccn,int di){
long long x=1;
for(int y=1;y<di;y++){
x=x*(long long)10;
}
return ccn%x;
x 是 long long。10 是 long long。这个错误是怎么发生的?
- 运行时错误:有符号整数溢出:1111111111111111111 * 10 不能用“long long”类型表示
【问题讨论】:
-
您的意思可能是在 for 语句中增加
y,而不是x。 -
600 毫升水可装入一升瓶中。 500 毫升可装入 1 升瓶中。那600毫升和500毫升怎么装不下1升的瓶子?
-
long long(默认情况下是有符号的)应该是(至少)64位长度,这意味着最大可表示数是(至少)+9,223,372,036,854,775,807(即2^63 -1)。您指定的数字 1,111,111,111,111,111,111 小于 9,223,372,036,854,775,807,因此适合签名的long long。但是,您的数字乘以 10 超过了签名long long的最大值。如果您将x声明为unsigned long long类型,那么您指定的乘法应该可以工作。祝你好运。 -
谢谢。我想我现在明白了。
-
@BobJarvis 你愿意回答吗?听起来不错,即使不是震撼世界的 Q/A 对。
标签: c