1.打印0~100000的自幂数
#include<stdio.h> #include<math.h> 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相同的时候,就是符合条件的自幂数。