对于一个三位数n,若每位数字的立方和等于其自身,则称为水仙花数,求出所有三位数的水仙花数之和,不使用pow函数,无输入要求。
分解出三个数字,计算立方和就好了
#include <stdio.h>
int main()
{
int sum = 0,a,b,c;
for(int i=100;i<1000;i++)
{
a = i/100;
b = i%100/10;
c = i%10;
if(a*a*a + b*b*b + c*c*c == i)
sum += i;
}
printf("%d",sum);
}
#include <stdio.h>
int main() {
int n, sum = 0;
for (n = 100; n <= 1000; n++) {
int a = n / 100;
int b= n / 10 % 10;
int c = n % 10;
if (a * a * a + b * b *b+ c * c * c == n) {
sum += n;
}
}
printf("所有三位数的水仙花数之和为:%d\n", sum);
return 0;
}
我做完啦
#include <stdio.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int n1, n2, n3, i;
for (i = 100; i < 999; ++i)
{
n1 = i / 100; // 百位数
n2 = (i - 100 * n1) / 10; //十位数
n3 = i % 10; //个位数
//printf("%d %d %d\n", n1, n2, n3);
if ((pow(n1, 3) + pow(n2, 3) + pow(n3, 3)) == i)
{
printf("%d 是一个水仙花数\n", i);
}
}
return 0;
}
```markdown 我的回答如下: 由于输入的是三位数,我们可以通过循环遍历3位数的数字范围,然后取出其每一位数字,计算立方和,再与原数字比较是否相等,从而判断是否为水仙花数。 具体实现步骤如下所示: 1. 定义一个变量用于计算水仙花数之和sum,并初始化为0。 2. 循环遍历数字范围100-999,即for(int i=100; i<1000; i++)。 3. 取出每个数字的各位数字,计算立方和,并记录到sum变量中。 4. 判断sum与原数字i是否相等,如果相等则说明i是水仙花数,累加到结果变量中。 5. 输出结果变量即可。
具体实现代码如下所示:
int main() { int sum = 0; // 水仙花数之和 for(int i = 100; i < 1000; i++){ int num = i; int digit1 = num / 100; // 取百位数字 num = num % 100; int digit2 = num / 10; // 取十位数字 num = num % 10; int digit3 = num; // 取个位数字 int narcissistic = digit1 * digit1 * digit1 + digit2 * digit2 * digit2 + digit3 * digit3 * digit3; if(i == narcissistic){ sum += i; // 累加水仙花数之和 } } printf("三位水仙花数之和为:%d\n", sum); return 0; }
参考了代码段落0中的水仙花数判断方法,不过修改了一些代码。 虽然题目不要求使用pow函数,但是为了代码更加简洁,可以使用pow函数来求立方值。
注:该题还有另外一种求解方法,是先写出求N位水仙花数的通用公式,然后再套用公式即可,但难度较大,不适用于该问题。