目录
1.输入一个数字,第一个for循环用来导入100000个数字。
2.第1个while循环则是来计算这个数字的位数,因为tmp每次/10就会少一位,count用来统计,直到tmp小于10,被/10等于0时停止(因为0为假所以停止)。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
1.解题思路
记住水仙花是n位数的每一位的n次方和加起来等于这个数字。
这题需要用到一个math函数pow次方函数。
记住n / 10算出的是这个数少一位的数字,n % 10算出的是这个数的最小位的数字。
2.代码分享
int main()
{
int i = 0;
for(i=0; i<=999999; i++)
{
int count = 1;
int tmp = i;
int sum = 0;
//判断i是否为水仙花数
//1. 求判断数字的位数
while(tmp/10)
{
count++;
tmp = tmp/10;
}
//2. 计算每一位的次方和
tmp = i;
while(tmp)
{
sum += pow(tmp%10, count);
tmp = tmp/10;
}
//3. 判断
if(sum == i)
printf("%d ", i);
}
return 0;
}
3.代码解析
1.输入一个数字,第一个for循环用来导入100000个数字。
2.第1个while循环则是来计算这个数字的位数,因为tmp每次/10就会少一位,count用来统计,直到tmp小于10,被/10等于0时停止(因为0为假所以停止)。
3.在进行第二个while循环时记得先将tmp初始化为i,第二个while循环则是开始计算那些数字是水仙花,sum初始化为0,与每次tmp % 10(取出最小位数)的count次方相加,每次 计算完成后要把 tmp/10,目的是将tmp的位数减一。
4.用if语句判断出sum是否与i相等,相等则是水仙花。。
4.总结
记得 n / 10算的是减一位的数字,n % 10则是最小位数的数字。
水仙花是 n 位数的每一位n 次方去相加。