问题描述
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。
#include<stdio.h>
#include<math.h>
int a,b,index, variable, variable_1, index_1, index_2, index_3, index_4,sum;
int function(int a, int b);//声明函数
int main(void)
{
scanf_s("%d%d", &a, &b);
printf("%d", function(a,b));
return 0;
}
int function(int a,int b)//定义函数开始
{
//int index, variable, variable_1, index_1, index_2, index_3, index_4, sum;
sum = 0;
index_1= 0;//数字的位数
index_2 = 0;//水仙花数的counter
variable = index;
variable_1 = index;//index是具体数字,求index_1时会将index改变,在此提前保存。
for (index = a; index <= b; index += 1)//范围
{
while (index != 0)
{
index /= 10;
index_1 += 1;
}//求出位数
index = variable;//恢复数据
if (index_1 > 2)//小于2位不是水仙花数
{
for (index_4 = 0; index_4 < index_1; index_4 += 1)
{
index_3 = variable % 10;//求出各位
sum += pow(index_3, (double)index_1);//计算
variable /= 10;
}
if (sum == variable_1)//比较结果
index_2 += 1;
}
if (index_1 <= 2)
{
index_2 += 0;
}
}
return index_2;
}
此题难点在于
求数位不容易想到,并且过程会改变数据,不注意会进入死循环。
所以,尽管代码可以使用更少的变量,但还是用多个变量保存数值,以免引起错误
/*仅记录个人学习过程,不对内容准确性负责*/