运行后输入12345678910 调试发现 x/10算出来是一个奇怪的负数
代码如下
#include <stdio.h>
int main() {
int x;
int n = 0;
scanf("%d", &x);
n++;
x /= 10;
while (x > 0) {
n++;
x /= 10;
}
printf("%d", n);
return 0;
}
运行后输入12345678910 调试发现 x/10算出来是一个奇怪的负数
代码如下
#include <stdio.h>
int main() {
int x;
int n = 0;
scanf("%d", &x);
n++;
x /= 10;
while (x > 0) {
n++;
x /= 10;
}
printf("%d", n);
return 0;
}
因为超出了int的表示范围
试试改成
long long x;
scanf("%lli", &x);
n++;
x /= 10;
while (x > 0) {
n++;
x /= 10;
}
printf("%lli", n);
return 0;
即使用长整型接收输入
对于更长的数字输入,考虑使用数组接受并计算,见
超长整数运算(大数运算)_小丑鱼和蝉的博客-CSDN博客
超长整数运算(大数运算)说明基于记忆体的有效运用,程式语言中规定了各种不同的资料型态,也因此变数所可以表 达的最大整数受到限制,例如123456789123456789这样的整数就不可能储存在long变数中(例 如C/C++等),我们称这为long数,这边翻为超长整数(避免与资料型态的长整数翻译混淆), 或 俗称大数运算。 解法一个变数无法表示超长整数,则就使用多个变数,当然这...
https://blog.csdn.net/qq_29611345/article/details/82655749