C语言---自幂数(“水仙花数”)

1.打印0~100000的自幂数

#include
#include
int main()
{
	int i = 0; 
	for (i = 0; i<100000; i++)
	{
		int n = 0;
		int temp = i;
		//判断位数
		while (temp)
		{
			n++;
			temp = temp / 10;
		}
		//每个数字求和
		temp = i;
		int sum = 0;
		while (temp)
		{
			sum = sum + pow(temp % 10, n);
			temp = temp / 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
}

自幂数就是一个数字每个数位上的数的位数次方,例如三位数123,位数是3,即1的3次方+2的3次方+3的3次方!=123,所以不是自幂数;

对于这个题目,1~100000,我们要确定他的位数,对这个数字进行除10操作,123进入后得1,除10之后是12,12进入后是2,除10是1,1进入后n是3,除以10后是0,跳出循环,这个时候得到的n就是位数;

接下来就是对每个数字求和,这里用到pow函数,这个函数有2个参数,第一个是底数,第二个是次数,我们从最低位开始计算,每次的结果加到sum上,对数字进行取余操作得到高一位的数字,依次进行相同的操作;

这里引入temp是因为i是最外层的循环变量,所以如果直接使用i就会无法遍历1~100000的每一个数字,所以我们引入中间变量temp,把i数值赋值给temp,我们对temp进行操作,这样就不会影响i的数值;

当i和sum相同的时候,就是符合条件的自幂数。

你可能感兴趣的:(C语言习题集,c语言,算法,数据结构)