C语言:打印0-100000中的自幂数(水仙花数是其中一种)_c语言输出10以内自幂数

101 阅读4分钟

求出 0~100000 之间的所有 自幂数 并输出。

自幂数是指一个n位数,其各位数字的n次方之和恰好等于该数本身,

如:153=1^3+5^3+3^3,

则153是一个自幂数。

=========================================================================

思路:

总体思路:

(一).

计算 i 的位数:

使用 for循环 产生 0~100000 的数(变量i)

使用一个变量 tmp 代替 i ,防止后续操作改变循环变量 i:

int tmp = i;

开始计算 i 的位数:

一个数 至少也是 一位数,所以 n 起始为 1 :

n = 1;

使用 while循环,如果 tmp/10 不为0,说明有位数,位数加一,n+1,直到 tmp/10 == 0

(二).

求每一位的 n次方之和:

因为上一步 tmp /= 10 改变了 tmp 的值,所以要再替换一次 i :

tmp = i;

创建变量 sum 存放每位次方后的和:

int sum = 0;

使用 while循环,如果 tmp 不等于 0 就继续取出当前位进行计算:

sum += pow(tmp % 10, n);

pow()函数为求第一个参数的第二个参数次方,需要<math.h>头文件

%10 取出当前位后,求出当前位的n次方,再求和赋给sum

计算完当前位后,移至该数的下一位:

tmp /= 10;

(三).

判断 sum 是不是自幂数,是则进行打印


                 

第一步:

计算 i 的位数:

(1).

使用 for循环 产生 0~100000 的数(变量i)

(2).

使用一个变量 tmp 代替 i ,防止后续操作改变循环变量 i:

int tmp = i;

(3).

开始计算 i 的位数:

一个数 至少也是 一位数,所以 n 起始为 1 :

n = 1;

使用 while循环,如果 tmp/10 不为0,说明有位数,位数加一,n+1,直到 tmp/10 == 0

实现代码:

#include <stdio.h>

int main()
{
	//使用for循环产生 0~100000 的数:
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		//使用变量 tmp 代替 i,防止后续操作改变循环变量:
		int tmp = i; //代替 i

		//计算 i 的位数:
		int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1

		//思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
		while (tmp /= 10) //直到tem/10==0,停止循环
		{
			n++;//统计位数
		}
		
	}

	return 0;
}

实现图片:


第二步:

求每一位的 n次方之和:

(1).

因为上一步 tmp /= 10 改变了 tmp 的值,所以要再替换一次 i :

tmp = i;

(2).

创建变量 sum 存放每位次方后的和:

int sum = 0;

(3).

使用 while循环,如果 tmp 不等于 0 就继续取出当前位进行计算:

sum += pow(tmp % 10, n);

pow()函数为求第一个参数的第二个参数次方,需要<math.h>头文件

%10 取出当前位后,求出当前位的n次方,再求和赋给sum

计算完当前位后,移至该数的下一位:

tmp /= 10;

实现代码:

#include <stdio.h>
#include <math.h>
int main()
{
	//使用for循环产生 0~100000 的数:
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		//使用变量 tmp 代替 i,防止后续操作改变循环变量:
		int tmp = i; //代替 i

		//计算 i 的位数:
		int n = 1; //位数,因为一个数至少也是一位数,所以n起始为1

		//思路:i/10 --> 可以去掉一位 --> n+1 ,直到 i/10==0
		while (tmp /= 10) //直到tem/10==0,停止循环
		{
			n++;//统计位数
		}
		
		//因为上面改变了 tmp /= 10 ,改变了 tmp 的值,
		//所以要再替换一次 i :
		tmp = i;

		//创建变量 sum 存放该数每一位次方的和:
		int sum = 0;

		//只要 i 不等于0,就继续取出下一位:
		while (tmp)
		{
			//%10,取出一位后,求出该位的n次方,再求和
			sum += pow(tmp % 10, n);

			//计算下一位:
			tmp /= 10;
		}

	}

	return 0;
}

实现图片:


第三步:

判断 sum 是不是自幂数,是则进行打印

实现代码:

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!