如何找到 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 位。 Plain int 通常运行高达 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", &amp;n) 如果用户键入可选空格,后跟可选符号,后跟至少 1 个数字,则将成功。 scanf("%9999s", buffer) 将接受可选空格和任何字符串,并且循环将仅计算初始数字,scanf("%9999[0-9]%n", buffer, &amp;n) 将仅读取数字,但在所有情况下,用户都可以在数字后键入其他字符,然后按 Enter。需要进一步测试来检测无效输入。 第二个程序中的 if 条件是什么意思?这个:if (scanf("%9999[0-9]%n", buffer, &amp;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的整数

请问大家如何在SQL里生成四位随机数?

C语言中如何保留一位小数点?

常量的按位或

C语言随机函数:用0到9这10位数随机输出4位.输出100次后停止...

C语言float问题,位数问题和四舍五入?