程序要求:
1、求数字0-999之间的所有水仙花数,并在屏幕输出
解析思路:
1、“水仙花数”:指一个N(N≥3)位的数字,其各位的数字N(位数)次方之和刚好等于数字本身。(如:153 = 1^3 + 5^3 + 3^3)
2、程序要求数字为0-999,“水仙花数”至少≥3位。因此先进行一个判断,满足要求才开始进行计算。
if (i > 99) //当数字满足位数要求才开始计算
3、将数字的每一位数分离出来,给到3个变量
a = i / 100; //分离出百位数 b = (i / 10) % 10; //分离出十位数 c = i % 10; //分离出个位数
4、计算各位数字之立方和,并判断是否与数字相等
方法一:在主函数直接计算并判断 //主函数内 if (i = a * a * a + b * b * b + c * c * c) { printf("%d ", i); } 方法二:创建一个立方计算函数fun_3来计算每位立方值,并在主函数内进行判断 //立方计算函数 int fun_3(int m) { int cube = m * m * m; //计算传入数的立方值 return cube; //返回计算的值 } //主函数内 if (i = fun_3(a) + fun_3(b) + fun_3(c)) { printf("%d ", i); } 方法三:使用立方计算库函数pow(需调用头文件math.h) //主函数内 if (i == pow(a, 3) + pow(b, 3) + pow(c, 3)) { printf("%d ", i); }
完整代码:
/* 方法一 */ //头文件 #include <stdio.h> //主函数 int main() { int i = 0; int a = 0, b = 0, c = 0; for (i = 0; i < 1000; i++) { if (i > 99) { a = i / 100; //百位 b = (i / 10) % 10; //十位 c = i % 10; //个位 if (a * a * a + b * b * b + c * c * c == i) { printf("%d ", i); } } } } /* 方法二 */ //头文件 #include <stdio.h> //立方计算函数 int fun_3(int m) { int cube = m * m * m; //计算立方值 return cube; //返回计算的值 } //主函数 int main() { int i = 0; int a = 0, b = 0, c = 0; for (i = 0; i < 1000; i++) { if (i > 99) { a = i / 100; //百位 b = (i / 10) % 10; //十位 c = i % 10; //个位 if (fun_3(a) + fun_3(b) + fun_3(c) == i) { printf("%d ", i); } } } } /* 方法三 */ //头文件 #include <stdio.h> #include <math.h> //主函数 int main() { int i = 0; int a = 0, b = 0, c = 0; for (i = 0; i < 1000; i++) { if (i > 99) { a = i / 100; //百位 b = (i / 10) % 10; //十位 c = i % 10; //个位 if (pow(a, 3) + pow(b, 3) + pow(c, 3) == i) { printf("%d ", i); } } } }