如何操纵数字的数字?

时间:2015-05-27 23:40:31

标签: c

在某些类型的问题中,我经常遇到这种情况,即我需要重新排列数字的变量,例如int e = 2385;。让我们假设我不知道那里存储了哪个号码,但我仍需要转移第2和第4个位置。当我知道变量的值时,我可以简单地做e = 2583,但是当我不知道时我根本无法解决问题。

另一种情况是,当我有两个值并希望使用它们来形成另一个数字,即int a = 2, b = 1;时,我需要对它们进行排序,以便得到21或212.我的意思是,这很容易当我输出数据时,我可以这样做:

printf("%d%d\n",a,b); 
printf("%d%d%d",a,b,a);

问题是我必须将此号码存储在另一个变量中。我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

这可以分为两个任务:(1)将数字分成几部分,(2)将部分组合成一个整数。

  1. 要将数字拆分成碎片,请使用除法和模数运算符。

    int num = 2385;
    
    int a = num / 1000;       // 2
    int b = num / 100 % 10;   // 3
    int c = num / 10  % 10;   // 8
    int d = num / 1   % 10;   // 5
    

    诀窍是使用除法删除右边的数字,然后使用模数来保留最右边的数字。例如,要计算数百个位置(b),我们计算2385/100,即23. 23%10是将23除以10时的余数。余数为3.

  2. 要将这些碎片合并为一个数字,请使用乘法和加法进行相反的操作。

    num = a * 1000            //   2000
        + d *  100            // +  500
        + c *   10            // +   80
        + b *    1;           // +    3
                              //   ----
                              //   2583
    

    请注意我如何切换db来交换这些数字。