【发布时间】:2010-12-02 18:19:58
【问题描述】:
我想像标题所说的那样做:
int number1;
cin>>number1;
num1len=log10(number1)+1;
cout<<"num of digits is "<<num1len<<"\n";
但当位数为 11 或更多时,答案总是7(6+1)
有谁知道我为什么或我做错了什么?
【问题讨论】:
-
我很惊讶你得到了 7 的答案! int 将溢出,实际值为负数 - 没有 log10(),输出应为“nanv”。
-
实际上,Nim,对 log10 的调用会悄悄地将该值转换为浮点值 - double、float 和 long double 的定义已重载。见cplusplus.com/reference/clibrary/cmath/log10
-
@Ben Voigt:从技术上讲,有符号整数溢出是未定义的行为,无论溢出有多大。
-
@Ben 是的,因为懒惰,我只输入了 12345678912,它溢出为负数......但我认为它希望能突出 OP 的意义......
-
@ephemient:从技术上讲,这不是算术溢出,而是在流提取运算符中发生转换失败。该标准要求结果是
如果该字段表示的值太大而无法表示的正值
,则该结果是最正的可表示值。所以我错了,它不能是任何可表示的值,尤其不能是负值。