c语言用递归调用求1000以内所有的水仙花数
时间: 2024-11-22 16:37:55 浏览: 28
在C语言中,递归调用来求解1000以内所有的水仙花数是一种常见的算法问题解决方法。水仙花数是指一个三位数(如153),它的每个位数字的立方和等于它本身,即百位数字的三次方加上十位数字的三次方再加上个位数字的三次方。例如,1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153。
下面是一个简单的C程序,使用递归来找到所有满足条件的水仙花数:
```c
#include <stdio.h>
// 辅助函数,检查是否为水仙花数
int isArmstrong(int num) {
int digits[4], sum = 0;
int temp = num;
// 分离每一位数字并计算其立方和
while (temp != 0) {
digits[sum++] = temp % 10;
temp /= 10;
}
int cubeSum = 0;
for (int i = 0; i < sum; i++) {
cubeSum += pow(digits[i], 3);
}
// 比较原数和其立方和是否相等
if (cubeSum == num)
return 1;
else
return 0;
}
// 主函数,使用递归遍历1000以内的整数
void findArmstrongNumbers(int low, int high) {
if (low <= high) {
int currentNum = low;
if (isArmstrong(currentNum))
printf("%d ", currentNum);
// 继续查找下一个数
findArmstrongNumbers(currentNum + 1, high);
}
}
int main() {
int start = 100, end = 999;
printf("水仙花数在%d到%d之间的有:\n", start, end);
findArmstrongNumbers(start, end);
return 0;
}
```
当你运行这个程序,它会打印出1000范围内所有的水仙花数。
阅读全文