c语言定义一个函数,用于判断一个正整数的位数;然后调用该函数用于实现输出所有3位数到8位数的水仙花数
时间: 2024-10-25 15:10:18 浏览: 41
在C语言中,你可以定义一个函数`isArmstrong(int num)`来判断一个正整数是否是水仙花数。水仙花数是指一个n位数,其各位数字的n次幂之和等于原数本身。例如,153是个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
下面是一个简单的函数定义和循环遍历示例:
```c
#include <stdio.h>
#include <math.h>
// 判断输入的数是否为水仙花数
int isArmstrong(int num) {
int original_num, sum, n;
n = floor(log10(num)) + 1; // 计算位数
original_num = num; // 备份原始数
while (num > 0) {
sum += pow((num % 10), n); // 取余并计算各个位的n次幂
num /= 10; // 减去当前位并向下取整
}
return (original_num == sum);
}
int main() {
for (int i = 100; i <= 999; i++) { // 遍历3位数到8位数
if (isArmstrong(i)) {
printf("%d 是水仙花数。\n", i);
}
}
return 0;
}
```
在这个程序中,我们首先检查从100到999的所有整数,如果某个数满足水仙花数条件,就打印出来。
相关问题
C语言:从键盘输入一个正整数n, 计算该数的各位数之 和并输出(定义一个新函数,递归法)
好的,下面是一个使用递归法实现的 C 语言程序,用于从键盘输入一个正整数 n,计算该数的各位数之和并输出:
```c
#include <stdio.h>
int sum_of_digits(int n);
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("该数的各位数之和为:%d\n", sum_of_digits(n));
return 0;
}
int sum_of_digits(int n) {
if (n < 10) {
return n;
} else {
return n % 10 + sum_of_digits(n / 10);
}
}
```
在这个程序中,我们同样使用了一个名为 `sum_of_digits` 的新函数来计算一个正整数的各位数之和。该函数使用递归的方式来计算各位数之和。具体来说,如果输入的数小于10,则直接返回该数;否则,该函数将输入的数除以10并取余数,将余数加到该数的各位数之和中,然后递归调用 `sum_of_digits` 函数并传递该数除以10的商作为参数。当输入的数变成一位数时,递归过程结束,并将各位数之和返回给调用者。
在 `main` 函数中,我们同样使用 `scanf` 函数从键盘输入一个正整数 `n`,并将其作为参数传递给 `sum_of_digits` 函数。最后,我们将 `sum_of_digits` 函数的返回值打印到终端上。
输入一个三位的正整数n, 输出100~n范围内所有的水仙花数。 用函数判断一个整数是不是水仙花数,是返回1,不是返回0。 主函数调用该函数,实现输出100~n之间的所有水仙花数。用C语言编写
要实现这个功能,你可以创建一个名为`is_narcissistic_number`的函数来判断一个给定的整数是否为水仙花数,然后再在主函数中遍历指定范围内的数字并调用此函数。以下是C语言的代码示例:
```c
#include <stdio.h>
// 函数定义,判断一个整数是否为水仙花数
int is_narcissistic_number(int n) {
int digits[4], sum = 0;
// 分离每一位数字
digits[0] = n % 10;
digits[1] = (n / 10) % 10;
digits[2] = (n / 100) % 10;
if (n >= 1000) { // 处理四位数的情况
digits[3] = n / 1000;
} else {
digits[3] = 0;
}
// 计算每一位的立方和
for (int i = 0; i < 4; ++i) {
sum += digits[i] * digits[i] * digits[i];
}
// 如果和等于原数,它是水仙花数,返回1;否则返回0
return (sum == n);
}
int main() {
int start, end, i;
printf("请输入起始范围(三位数): ");
scanf("%d", &start);
printf("请输入结束范围(不包括): ");
scanf("%d", &end);
if (start > 999 || end < 100 || end <= start) {
printf("无效的输入范围。\n");
return 0;
}
printf("100到%d范围内的水仙花数:\n", end - 1);
for (i = start; i < end; ++i) {
if (is_narcissistic_number(i)) {
printf("%d, ", i);
}
}
printf("\n");
return 0;
}
```
这段代码首先定义了一个`is_narcissistic_number`函数,用于计算输入整数的每位数字立方和并比较其与原始数是否相等。在主函数中,用户会被提示输入一个三位数的范围,然后遍历这个范围内的每个数,如果该数是水仙花数,则打印出来。注意,这里只处理了三位和四位数的情况。
阅读全文