“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
假设我们要求1~100000之间的水仙数,根据水仙数的定义,我们首先要判断这个数字是几位数,然后再取每个位数上的数字,依次乘方相加。所以大致步骤如下
①判断该数字是几位数
②取每个位数上的数字
③乘方相加
④判断是否为水仙数
根据取模和求商的操作可知,我们每次取模都可以得到一个数字得最后一个数字,取商得操作可知每次取商数字少一位,那么我们每次取模完用变量接收,再取商就可以得到每个数字,实现了步骤一和步骤二。
具体代码如下:
int main()
{
for (int i = 1; i <= 100000; i++)
{
int count = 0;
int b = i;
int n = i;
int m = i;
while (m!=0)
{
m = m / 10;
count += 1;
}
int d = 0;
for (int j = 0; j < count; j++)//每个数字进行乘方并相加
{
int c = b % 10;
b = b / 10;
d += pow(c, count);
}
if (d == n)//判断
printf("%d\n", n);
}
return 0;
}
注意,while循环处如果还是使用最外层的i变量,则最外层for循环会出错,无法进入下一层循环,i一直为1,所以这里我使用了变量来代替i变量。
标签:取模,变量,水仙,区间,几位数,位数,某个,数字 From: https://blog.csdn.net/spikezqq/article/details/144063357