如何将整数分成多个数字?

时间:2019-06-13 22:35:00

标签: c algorithm

我有一个余数函数,该函数求一个数字的模,然后用一个除法器函数对该数求和。我的程序无法按我需要的方式工作。例如,如果我输入2502作为我的数字,我应该得到以下输出:2 5 0 2。 我需要能够在每次迭代中存储值,例如:

number: 123
    123 % 10 = 3  //last digit
Number: 123 / 10 = 12
    12  % 10 = 2  //second digit
Number: 12  / 10 = 1
    1   % 10 = 1  //first digit

int Rem(int num);
int Div(int num);

int main() {
    int num;
    printf("Enter an integer between 1 and 32767: ");
    scanf("%d", &num);
    Rem(num);
    Div(num);
    printf("%d","The digits in the number are: ");

}


    int Rem(int num) {
        while(num != 0){
        int rem = num % 10;
        return rem;
        }
    }

    int Div(int num){
        while(num != 0){
        int div = num / 10;
        return div;
        }
    }

3 个答案:

答案 0 :(得分:1)

这里的想法很简单,但是有一些细微之处。这是一些伪代码。您需要转换为C。

num = 9934; // or get it from input
do {
    rem = num % 10;  // this gives you the lowest digit
    num = num / 10;  // divide by 10 to get rid of that lowest digit
    print rem; 
} while (num != 0);

我使用do ... while循环,因此如果用户输入0,输出将正确。

如果对此进行编码和运行,您会注意到它以相反的顺序打印数字:4 3 9 9。因此,在输出数字之前,您需要某种方式来反转数字。三种可能的方式是:

  1. 将数字存储在数组中,然后在输出之前反转数组。
  2. 将每个数字推入堆栈。完成后,将每个数字从堆栈中弹出并输出。
  3. 编写一个递归函数。这将消除对显式堆栈或数组的需要。

答案 1 :(得分:0)

您也可以将其转换为字符串,然后再转换回该字符串的元素,但请记住'\ 0'

答案 2 :(得分:0)

您可以简单地使用此函数,它返回通过参数传递的位数

size_t  ft_cnbr(int n)
    {
        size_t count;

        count = 1;
        if (n < 0)
        {
            count++;
            n = -n;
        }
        while (n > 9)
        {
            n = n / 10;
            count++;
        }
        return (count);
    }