【问题标题】:How to read a number into "subnumbers"?如何将数字读入“子数字”?
【发布时间】:2026-02-15 12:15:01
【问题描述】:

所以我的意思是我想把数字 1234 读成其他四个数字 1、2、3 和 4。现在我知道 % 运算符以及如何做到这一点,但数字来自控制台可能长达 100 位,据我所知,您无法在内存中存储这么大的数字。

所以真正的问题来了:

如何从控制台单独读取其数字,而无需读取整个数字,然后使用模数将其分开?

或者有没有其他方法可以解决这个问题?

提前致谢!!

【问题讨论】:

  • 不要读取 number 而是读取 string。然后您可以访问每个字符,并可以将其转换为整数:int i = c - '0'
  • 我的意思是是否可以一次读取一个数字!?所以在 1234 上读取 1 与 2 和 3 和 4 分开!!
  • “你不能在内存中存储这么大的数字”——通过使用任意精度的算术,我们可以表示比这更大的数字......考虑使用this web calculator

标签: c console modulo


【解决方案1】:
  1. 在循环中使用getc() 来读取每个字符,或者使用fgets() 将整行读取为字符串。
  2. 对于每个字符,减去 '0' 以将 ascii 代码转换为十进制数(如果需要,可以选择检查 '0''9' 之间的有效范围。

【讨论】:

    【解决方案2】:

    这是一个演示程序

    #include <stdio.h>
    
    int main( void )
    {
        int x;
    
        while ( scanf( "%1d", &x ) == 1 ) printf( "x = %d\n", x );
    }  
    

    如果进入

    0123456789
    

    程序输出将是

    x = 0
    x = 1
    x = 2
    x = 3
    x = 4
    x = 5
    x = 6
    x = 7
    x = 8
    x = 9
    

    【讨论】:

      【解决方案3】:

      让你要分隔的数字在变量i中,

      int i;
      char buffer [100];
      int num[100];
      sprintf(buffer,"%d",i);
      
      int n;
      for(n=0;buffer[n]!='\0';n++){
      num[n]=buffer[n]- '0';       //Converting ASCII character to integer
      }
      

      现在我们将整数 i 分成数组 num[] 中的各个成员编号

      不要忘记包含以下标题:

      #include <stdio.h>
      

      【讨论】:

      • 该问题明确指出,该数字可能大于任何标准整数数据类型的数字。