c语言 水仙花数详解

记录:最近开始看之前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
 } 

猜你喜欢

转载自blog.csdn.net/qq_42537825/article/details/124839412