1.输入一个非零正整数,输出其各位数字。要求数字之间间隔至少一个空格。 例如:输入12085, 输出为1 2 0 8 5。 要求:采用递归和非递归(用堆栈)两种算法;输入的整数不允许按单个字符输入。C语言
时间: 2024-10-08 19:19:02 浏览: 55
在C语言中,我们可以使用递归和非递归(通过堆栈模拟)两种方法实现这个功能。下面是两种方法的示例:
**递归方法:**
```c
#include <stdio.h>
void print_digits(int num, int index = 0) {
if (num == 0) {
return;
}
printf("%d", num % 10);
if (index != 0) { // 防止第一个数字后面直接跟空格
printf(" ");
}
print_digits(num / 10, index + 1); // 递归调用处理下一个位
}
int main() {
int num = 12085;
printf("Input number: %d\n", num);
print_digits(num);
return 0;
}
```
**非递归方法(利用堆栈):**
```c
#include <stdio.h>
#include <stack>
#define MAX_DIGITS 100
void print_digits_iterative(int num) {
stack<int> digits;
while (num > 0) {
digits.push(num % 10);
num /= 10;
}
while (!digits.empty()) {
printf("%d", digits.top());
digits.pop();
if (!digits.empty())
printf(" "); // 除非最后一个数字,其他都加空格
}
}
int main() {
int num = 12085;
printf("Input number: %d\n", num);
print_digits_iterative(num);
return 0;
}
```
**相关问题--:**
1. 这两种方法哪一种更适合处理大整数?
2. 在递归版本中,如何防止第一个数字后面直接跟空格?
3. 如果需要同时支持负数,上述代码该如何修改?
阅读全文