【发布时间】:2021-04-28 13:05:47
【问题描述】:
这是我的代码:`
#include <stdio.h>
void main() {
int n;
int count = 0;
printf("Enter an integer: ");
scanf("%d", &n);
// iterate until n becomes 0
// remove last digit from n in each iteration
// increase count by 1 in each iteration
while (n != 0) {
n /= 10; // n = n/10
++count;
}
printf("Number of digits: %lld", count);
}
我能够很好地运行代码,但是当我输入 15 或 16 位数字 作为输入时,它总是显示我的位数是 @987654323 @。这段代码的另一个问题是,假设如果我输入000,那么我希望输出为3 digits,但这段代码无法做到这一点,因为while 循环中的条件立即变为假。那么如何编写一个代码,让我能够将最多 100 或 1000 位数字作为输入,同时还能让我输入 0s em> 也是。
注意:这个程序应该使用循环和 C 语言来解决 我在用 c++ 编写的 stackoverflow 中找到了这个问题的答案,我什至无法理解,因为我是初学者并且正在学习 C。 链接到答案: How can I count the number of digits in a number up to 1000 digits in C/C++
【问题讨论】:
-
使用字符串,而不是整数,并计算字符串的长度。
-
一个 int 只能保存 32 或 64 位,因此不能保存 100 位数字,这需要 100 位。
-
Plain
int通常运行高达 20 亿,因此是 9 或 10 位数。还有更多,您需要更大的数据类型,例如long long。这会让你达到 16 位数。 -
@stark ceil(log(1e100)/log(2)) = 具体来说是 333 位。
-
鉴于要求对零位字符串进行计数,这显然是一个字符串处理问题,不需要算术解决方案,即使输入少于 10 位也不行。