任给十进制的正整数,用C语言分别使用循环和递归的算法完成以下操作: (1)请按序输出其各位数字。 (2)逆序输出其各位数字
时间: 2024-10-12 17:09:27 浏览: 34
给定一个十进制正整数N,程序输出从1到N的所有整数中,“1”出现的个数。DMU
5星 · 资源好评率100%
在C语言中,我们可以使用循环和递归两种方法来完成这个任务。以下是两个操作的示例:
**1. 输出正整数的各位数字(循环)**
```c
#include <stdio.h>
void print_digits(int num) {
while (num != 0) {
int digit = num % 10;
printf("%d", digit);
num /= 10;
}
}
int main() {
int number;
printf("请输入一个正整数: ");
scanf("%d", &number);
print_digits(number);
printf("\n");
return 0;
}
```
**2. 逆序输出正整数的各位数字(循环)**
```c
#include <stdio.h>
void reverse_digits(int num, int reversed[]) {
int index = 0;
while (num > 0) {
reversed[index++] = num % 10;
num /= 10;
}
}
int main() {
int number, reversed[10];
printf("请输入一个正整数: ");
scanf("%d", &number);
reverse_digits(number, reversed);
for (int i = 0; i < sizeof(reversed) / sizeof(reversed[0]); i++) {
printf("%d", reversed[i]);
}
printf("\n");
return 0;
}
```
**递归版本的逆序输出(递归)**
由于递归实现会增加复杂性和栈空间消耗,对于大数可能会导致堆栈溢出。但如果为了教学目的演示,可以这样做(仅适用于小数):
```c
#include <stdio.h>
int reverse_recursive(int num, int reversed[], int index) {
if (num == 0) {
return index;
} else {
reversed[index] = num % 10;
return reverse_recursive(num / 10, reversed, index + 1);
}
}
int main() {
int number, reversed[10];
printf("请输入一个小于100的正整数: ");
scanf("%d", &number);
int length = reverse_recursive(number, reversed, 0);
for (int i = length - 1; i >= 0; i--) {
printf("%d", reversed[i]);
}
printf("\n");
return 0;
}
```
**
阅读全文