求出0-100000之间的所有“水仙花数“并输出(c语言)

"水仙花数"是指一个n位数,其各位数字的n次方之和恰好等于该数本身。

例:153=1^3+5^3+3^3   153是一个水仙花数

分析:首先要计算该数字有多少位,然后再计算该数字的每一位的n次方之和,最后是和与该数字本身进行判断两者是否相等。

一.如何计算该数字有多少位呢?

例:1是由1位数字组成,12是由2位数字组成,123是由3位数字组成,1234是由4位数字组成。

该数字与10相除即可剥离一位数字,与10相除的结果继续与10相除即可剥离每一位。

1:1/10==0(结束)

1由1位数字组成

12:12/10==1(把2剥离,只剩1)

        1/10==0(结束)

12由2位数字组成

123:123/10==12(把3剥离,只剩2和1)

         12/10==1(把2剥离,只剩1)

         1/10==0(结束)

123由3位数字组成

1234:1234/10==123(把4剥离,只剩3,2和1)

           123/10==12(把3剥离,只剩2和1)

           12/10==1(把2剥离,只剩1)

           1/10==0(结束)

 二.如何计算该数字的每一位呢 ?

   例:1是由1位数字组成,12是由2位数字组成,123是由3位数字组成,1234是由4位数字组成。

该数字连续模10和除以10即可得到每一位。

1:1%10==1(个位)

       1/10==0(结束)

12:12%10==2(个位)

        12/10==1

        1%10==1(十位)

        1/10==0(结束)

123:123%10==3(个位)

         123/10==12

         12%10==2(十位)

         12/10==1

        1%10==1(百位)

         1/10==0(结束)

1234:1234%10==4(个位)

            1234/10==123

            123%10==3(十位)

            123/10==12

            12%10==2(百位)

            12/10==1

            1%10==1(个位)

            1/10==0(结束)

#include <math.h>
#include <stdio.h>
int main() {
	//打印"0-100000之间的自幂数(包括水仙花数)"
	int i = 0;
	for (i = 0;i < 100000;i++) {
		//1.计算i一共有多少位-n
		int n = 1;
		int temp = i;
		while (temp/10) {
			n++;
			temp = temp / 10;
		}
		//2.计算i的每一位的n次方之和
		temp = i;
		int sum = 0;
		while (temp) {
			sum+=pow(temp % 10,n);
			temp = temp / 10;
		}
		
		//3.判断是否和自身相等
		if (sum == i) {
			printf("%d ",i);
		}
	
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Jushuzhan/article/details/125800395