我想把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;
}