#include <stdio.h>
int quickpow(int x, int y)
{
int a = 1;
while (y)
{
if (y & 1)
a *= x;
x *= x;
y >>= 1;
}
return a;
}
int main()
{
int n, i = 1, f, q;
scanf("%d", &n);
f = quickpow(10, n - 1); //因为我们要找n位数的值所以现设f从n-1位数开始
i = f; //用i记录
while (i < f * 10)
{
q = i; //用q记录i
int sum = 0; //用sum记录各位数n次方之和
do
{
int p;
p = q % 10; //用p记录各位数
q /= 10; //每一次我们把q丢掉后面的一位
sum += quickpow(p, n); //quickpow效果等同于pow不用管
} while (q > 0); //我们每次丢的过程中q都在少一位最后变为0,这就是我们跳出循环条件
if (sum == i)
printf("%d\n", sum);
i++; //遍历10的n-1次方到10的n次方之间的数
}
return 0;
}
?quickpow为快速幂过程
主要过程是把指数二进制
|