如何找到 c 中 int 位数最多 100 位或 1000 位的位数?
Posted
技术标签:
【中文标题】如何找到 c 中 int 位数最多 100 位或 1000 位的位数?【英文标题】:How to find the number of digits int digits in c upto 100 or 1000 digits? 【发布时间】: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++ 编写的 *** 中找到了这个问题的答案,我什至无法理解,因为我是初学者并且正在学习 C。 链接到答案: How can I count the number of digits in a number up to 1000 digits in C/C++
【问题讨论】:
使用字符串,而不是整数,并计算字符串的长度。 一个 int 只能保存 32 或 64 位,因此不能保存 100 位数字,这需要 100 位。 Plainint
通常运行高达 20 亿,因此是 9 或 10 位数。还有更多,您需要更大的数据类型,例如long long
。这会让你达到 16 位数。
@stark ceil(log(1e100)/log(2)) = 具体来说是 333 位。
鉴于要求对零位字符串进行计数,这显然是一个字符串处理问题,不需要算术解决方案,即使输入少于 10 位也不行。
【参考方案1】:
不是读取数字,而是读取字符串并计算数字:
#include <stdio.h>
int main()
char buffer[10000];
int n;
printf("Enter an integer: ");
if (scanf("%9999s", buffer) == 1)
for (n = 0; buffer[n] >= '0' && buffer[n] <= '9'; n++)
continue;
printf("Number of digits: %d\n", n);
return 0;
您也可以使用scanf()
scanset 功能一步完成测试:
#include <stdio.h>
int main()
char buffer[10000];
int n;
printf("Enter an integer: ");
if (scanf("%9999[0-9]%n", buffer, &n) == 1)
printf("Number of digits: %d\n", n);
return 0;
【讨论】:
谢谢,但是n的值是多少? @ShubhamBhandari:n
不是数字,而是位数。它在第一个版本的for
循环中计算,并由scanf()
通过%n
转换在第二个版本中存储。该数字未转换,仍以文本形式保存在 buffer
数组中。
@chqrile 如果我希望用户只输入数字(整数)而不输入任何其他字符或字母怎么办?
@ShubhamBhandari:您不能阻止用户输入他们想要的内容。您只能检测违规字符。 scanf("%d", &n)
如果用户键入可选空格,后跟可选符号,后跟至少 1 个数字,则将成功。 scanf("%9999s", buffer)
将接受可选空格和任何字符串,并且循环将仅计算初始数字,scanf("%9999[0-9]%n", buffer, &n)
将仅读取数字,但在所有情况下,用户都可以在数字后键入其他字符,然后按 Enter。需要进一步测试来检测无效输入。
第二个程序中的 if 条件是什么意思?这个:if (scanf("%9999[0-9]%n", buffer, &n) == 1)
【参考方案2】:
32 位有符号整数的最大值等于 2,147,483,647,因此,如果输入更大的整数,则不会存储。我会让它接收一个字符串并获取它的长度,如下所示:
#include <stdio.h>
#include <string.h>
int len = strlen("123123123123132");
【讨论】:
【参考方案3】:您正在使用 int 变量,并且您正在尝试计算一个数字,例如其数字是 100 或 1000。它不适合 int。所以将输入作为字符串并计算字符串的长度。
【讨论】:
以上是关于如何找到 c 中 int 位数最多 100 位或 1000 位的位数?的主要内容,如果未能解决你的问题,请参考以下文章
c语言输出100至999之间所有的个位数十位数百位数之和为5的整数