题目一:
请输出所有的"水仙花数"。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。
例如,153是水仙花数,因为153=1^3 +5^3+ 3^3
方法一:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
int i=0;
for(i=100;i<1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==(pow(a,3)+pow(b,3)+pow(c,3)))
printf("%d是水仙花数",i);
}
return 0;
}
运行结果如下:
方法二:(重点)
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
int num=0;
int temp = 0;
int sum = 0;
for (int num = 100; num< 1000; num++)
{
temp = num;
for (i = 1; i <= 3; i++)
{
j = temp % 10;
temp = temp / 10;
sum += pow(j, 3);
}
if (num == sum)
printf("%d是水仙数\n", num);
sum = 0;
}
}
这种方式的不同在于你可以随时更改num的范围,并且更改%10循环的次数,以达到求更多位数的效果,当然你也可以手动输出要求的位数有多少个水仙花数(抱歉,只有3位数才叫水鲜花数,但是按这种形式讨论下四位数也不是不可以)
#include<stdio.h>
#include<math.h>
int main()
{
int i, j;
int num = 0;
int temp = 0;
int sum = 0;
int n=0;
while (scanf("%d",&n) != EOF)
{
for (int num =pow(10,n-1); num <pow(10,n); num++)
{
temp = num;
for (i = 1; i <= n; i++)
{
j = temp % 10;
temp = temp / 10;
sum += pow(j, n);
}
if (num == sum)
printf("%d是水仙数\n", num);
sum = 0;
}
}
return 0;
}
结果如图了:
这里面就可以多试试了。我是菜鸡,好多次都是通过F10去考虑思路的,所以大家也可以多多思考一下。