将多位数分解成单独的数字而不交换其顺序



我想把4567分成4,5,6,7,分隔的方法之一是:

int value =4567, rightDigit;
rightDigit =number%10;
number /=10;

结果为7,6,5,4,我如何让它打印4 5 6 7代替?由于

不需要显式地存储数字。您可以使用调用堆栈来存储它们并按正确的顺序打印它们。

void print_digits(int n) {
    // In case n is negative, print the leading '-'
    // and transform n to a non-negative number
    if(n < 0) {
        printf("-");
        n = -n;
    }
    if(n/10) {
        print_digits(n/10);
    }
    printf("%d", n%10);
}

数组或堆栈就可以了。您还可以使用除数(伪代码):

num = whatever
div=1'000'000'000 // ints are 2 billion max
first = false
while div > 0:
  digit = num / div
  first = first or (digit != 0)
  if first: handleDigit(digit)
  num = num % div
  div = div / 10

为此,您需要将% 10操作生成的所有数字存储到一个数组中,然后按相反顺序打印该数组。代码如下-

int main()
{
    int i,c=0,value=4567,r,arr[10];
    while(value){
        r=value%10;
        arr[c++]=r;
        value/=10;
    }
    for(i=c-1;i>=0;i--){
        printf("%d",arr[i]);
    }
    return 0;
}

使用stack可以解决这个问题。

 #include <iostream>
  #include <stack>
    int main()
    {
        using namespace std;
        queue<int> digit;
        int number;
        cin >> number;
        while (number != 0)
        {
            digit.push(number % 10);
            number /= 10;
        }
        while (!digit.empty())
        {
            cout << digit.top() << " ";
            digit.pop();
        }
        cout << endl;
        return 0;
    }

最新更新