【问题标题】:How to find the number of digits int digits in c upto 100 or 1000 digits?如何找到 c 中 int 位数最多 100 位或 1000 位的位数?
【发布时间】: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 位也不行。

标签: c loops count logic


【解决方案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。所以将输入作为字符串并计算字符串的长度。

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2010-09-14
      • 2012-02-18
      • 2015-08-20
      相关资源
      最近更新 更多