记录:最近开始看之前c语言的一些题目,保持脑子的灵活度。
水仙花定义:水仙花数是指一个n位正整数(n>=3,)他的每个位上的数字的n次幂之和等于他本身
例如:153 = 1^ 3+5^3+3 ^3
思路分析:
- 第一步:先输入这个n ,由此判定n 的位数范围 例如n = 3,n∈(100,999)
- 第二步:确定此范围界限,通过变量first 每次*10遍历得到范围左边界,
- 第三步:确定了范围,再用一个变量i 记录每次在范围内被遍历的数,分解这个i,得到它的个位,十位,百位…最高位 ,通过循环依次分解i, 省去了用额外的变量存其他位
- 第四步:定义一个变量p 用来保存这个i 的 每一位,方便进行幂次相加,通过循环一个变量j = 1,来控制幂p
- 第五步:定义一个求和sum 保存 每次循环过的p相加(位的幂次相加),让sum 和 i 进行比较 输出
int main()
{
int n;
scanf("%d",&n);
int first = 1;//用来 存开始的数 定n位正整数的范围
int i= 1;
while(i<n){
first *= 10;
i ++;
}
//找出所有三位数 ,就要遍历100-999
i = first;
while( i<first*10){
// 我们要分解这个i, 算出他的n次幂
int t =i;
int sum = 0;
do {
int d = t%10;//个位
t/=10;
int p = d;
int j = 1;//控制幂次
while ( j<n ) {
p *= d;
j++;
}
sum += p;
} while ( t>0 );
if ( sum == i ) {
printf("%d\n", i);
}
i++;
}
return 0;//前端小白兔ggogo
}