【问题标题】:C: how to break apart a multi digit number into separate variables?C:如何将多位数字分解为单独的变量?
【发布时间】:2012-03-07 08:14:41
【问题描述】:

假设我在 C 中有一个多位整数。我想将其分解为个位整数。

123 会变成123

我该怎么做,尤其是如果我不知道整数有多少位?

【问题讨论】:

  • 如果您的 int 以 char 数据开始生活(来自用户或文本文件的输入...),请不要首先转换为 int(没有 scanf,没有 atoi .. .) 并使用字符分隔数字。

标签: c math numbers digits digit


【解决方案1】:

你可以使用%10,意思是除数后的余数。所以123 % 10 是 3,因为余数是 3,从 123 中减去 3,然后是 120,然后将 120 除以 10,即 12。然后做同样的过程。

【讨论】:

    【解决方案2】:

    你可以分而治之,但你已经重写了所有的算术库。我建议使用多精度库https://gmplib.org 当然这是一个好习惯

    【讨论】:

      【解决方案3】:

      我是根据@asaelr 的代码制作的:

      typedef struct digitsArrayPlusNumber {
          uint32_t *baseAddress;
          uint32_t number;
      } digitsArrayPlusNumber;
      
      digitsArrayPlusNumber *splitDigits (uint32_t inValue) {
          // based on code from asaelr@stackoverflow.com
      
          uint32_t inputValue = inValue;
      
          //Count digits
      
          uint32_t theCount = 1;
          while (inputValue /= 10)
              theCount++;
      
          // put in array
          uint32_t *arr = malloc(sizeof(uint32_t) * theCount);
          uint32_t dig = theCount;
          while (dig--) {
              arr[dig]=inValue % 10;
              inValue /= 10;
              //  printf ("%d\n", arr[dig]);
          }
      
          digitsArrayPlusNumber *dandn = malloc (sizeof(digitsArrayPlusNumber));
      
          dandn->baseAddress = arr;
          dandn->number = theCount;
      
          return dandn;
      
      }
      
      int main(int argc, const char * argv[]) {
      
      
          for (int d = 0; d < splitDigits(12345678)->number; d++)
              printf ("%u\n", (splitDigits(12345678)->baseAddress)[d]);
      
      }
      

      效果很好,谢谢!

      【讨论】:

        【解决方案4】:
        //Based on Tony's answer
        #include <stdio.h> 
        int nthdig(int n, int k){
            while(n--)
                k/=10;
            return k%10;
        }
        
        int main() {
            int numberToSplit = 987;
            printf("Hundreds = %i\n",nthdig(2, numberToSplit));
            printf("Tens     = %i\n",nthdig(1, numberToSplit));
            printf("Units    = %i\n",nthdig(0, numberToSplit));
        }
        

        这会产生以下打印输出:

        数百 = 9

        十位 = 8

        单位 = 7

        【讨论】:

          【解决方案5】:

          我们可以将此程序用作具有 3 个参数的函数。在“while(a++

          int main(){
          long signed c=0,z,a=0,b=1,d=1;
          scanf("%ld",&z);
          while(a++<2){
                 if(d++==1) 
                 z/=pow(10,6);
                 c+=(z%10)*b; 
                 z/=10;
                 b*=10;}
                  return c;}
          

          【讨论】:

          • 永远不要为此使用 pow
          【解决方案6】:

          我认为下面的代码会有所帮助....

          temp = num;
          while(temp)
          {
              temp=temp/10;
              factor = factor*10;
          }
          
          printf("\n%d\n", factor);
          printf("Each digits of given number are:\n");
          
          while(factor>1)
          {
              factor = factor/10;
              printf("%d\t",num/factor);
              i++;
              num = num % factor;
          }
          

          【讨论】:

            【解决方案7】:

            首先,数数:

            unsigned int count(unsigned int i) {
             unsigned int ret=1;
             while (i/=10) ret++;
             return ret;
            }
            

            然后,您可以将它们存储在一个数组中:

            unsigned int num=123; //for example
            unsigned int dig=count(num);
            char arr[dig];
            while (dig--) {
             arr[dig]=num%10;
             num/=10;
            }
            

            【讨论】:

              【解决方案8】:

              123 的最后一位是 123 % 10。 您可以通过执行 123/10 删除 123 的最后一位数字——使用整数除法将得到 12。 回答你关于“我怎么知道你有多少位数”的问题—— 尝试按照上述方法进行操作,您将了解如何知道何时停止。

              【讨论】:

                【解决方案9】:
                int value = 123;
                while (value > 0) {
                 int digit = value % 10;
                 // do something with digit
                 value /= 10;
                }
                

                【讨论】:

                  【解决方案10】:

                  作为提示,获取数字中的第 n 个数字非常容易;除以 10 n 次,然后 mod 10,或者在 C 中:

                  int nthdig(int n, int k){
                       while(n--)
                           k/=10;
                       return k%10;
                  }
                  

                  【讨论】:

                  • 这不是第n个数字,这是从最低有效位开始的第n个数字
                  • 你不认为最低有效位是第零位吗?
                  • 好吧,我认为 123 的第一个或第零个数字是 1,而不是 3。
                  猜你喜欢
                  • 1970-01-01
                  • 2016-01-01
                  • 2021-04-05
                  • 2017-08-19
                  • 1970-01-01
                  • 2020-07-30
                  • 2015-08-17
                  • 2015-05-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多