长整数的个别数字?

时间:2014-09-10 21:08:55

标签: c

用户将输入一个4位长的数字。该数字总是4位数。我需要找出一种方法来分解4位数的长数,并读取每个数字。一旦我有了每个数字,我就会对它进行计算:

int num;
num = (num + 7) % 10    

我将添加7,然后除以10,并取余数并使用该值作为新值。然后我会打印出余数。

如何分解4位长号码,并使用个别数字进行计算?

此外,我必须能够扭转这一过程。如果我只给出余数,我该如何打印原始数字?

3 个答案:

答案 0 :(得分:1)

int number; //suppose number is 7653
...

int n = number;         //n = 7653
int lastDigit = n%10;   //3
n/=10;                  //n = 765
int thirdDigit = n%10;  //5
n/=10;                  //n = 76
int secondDidit = n%10; //6
n/=10;                  //n = 7
int firstDigit = n;     //7

这显然也可以在循环中完成。

答案 1 :(得分:0)

递归例程将处理4位数字以及32位unsigned最多9位数。

unsigned R7(unsigned x) {
  unsigned y = 0;
  if (x >= 10) {
    y = R7(x / 10) * 10;
  }
  y += (x % 10 + 7) % 10;
  return y;
}

int main(void) {
  printf("%04u\n", R7(1));
  printf("%04u\n", R7(12));
  printf("%04u\n", R7(123));
  printf("%04u\n", R7(4321));
  printf("%04u\n", R7(987654321));
  return 0;
}

// Output
0008
0089
0890
1098
654321098

要反转此过程,请添加3而不是7。

答案 2 :(得分:0)

另一种方法是将数字作为字符串读取,然后将每个字符传递给2字符串,并使用atoi获取数值。然后,它可以通过将转换限制为前四个字符来处理任意数量的数字输入:

#include <stdio.h>
#include <stdlib.h>

int main (void) {

    char *line = NULL;      /* pointer to use with getline ()   */
    ssize_t read = 0;       /* number of characters read        */
    size_t n = 0;
    int cnt = 0;
    char numstr[] = "a";    /* array to hold each char of input */
    int num = 0;            /* number result                    */

    printf ("\nEnter a 4-digit number (or ctrl+d to quit)\n");

    while (printf ("\n input: ") && (read = getline (&line, &n, stdin)) != -1) {

        if (read > 4) {
            for (cnt = 0; cnt < 4; cnt++) {
                numstr[0] = line[cnt];
                num = (atoi (numstr) + 7) % 10;
                printf ("    ( %d + 7 ) %% 10 = %d\n", atoi (numstr), num);
            }
        }
    }
    printf ("\n");
    return 0;
}

注意:进一步输入验证(例如确认输入的每个字符是数字)留作练习。这只是为了显示将输入处理为字符串的机制。

<强>输出:

./bin/digits

Enter a 4-digit number (or ctrl+d to quit)

input: 1234
    ( 1 + 7 ) % 10 = 8
    ( 2 + 7 ) % 10 = 9
    ( 3 + 7 ) % 10 = 0
    ( 4 + 7 ) % 10 = 1

input: 23456
    ( 2 + 7 ) % 10 = 9
    ( 3 + 7 ) % 10 = 0
    ( 4 + 7 ) % 10 = 1
    ( 5 + 7 ) % 10 = 2