水仙花数的介绍:
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
该题难点:
1.确定每个数字的位数;
2.分离每个数字的各个位数;
3.将每个数字的各个位数按照总位数进行次方相乘
解决方案 :
1.定义一个函数来判断每个数字的位数
函数代码如下:
int Digit(int n)
{
int digit = 0;//digit用来记录数字的位数
while (n > 0)
{
digit++;
n /= 10;
}
return digit;
}
2.定义一个函数来分离每个数字的个位、十位、百位…….
利用取余的方式完成该函数的编写,代码如下:
int num(int n)
{
n %= 10;
return n;
}
3.根据上述定义的两个函数完成判断数字是否为水仙花数,再定义一个判断函数,函数代码如下:
int Judge(int n, int digit)//每次传入数字和该数字的位数
{
int a, b, sum = 0, c = n;//a用来记录每次分离出的数字,sum用来记录各个位数的次方乘后之和,c用来保存传入的数字
for (int i = 0; i < digit; i++)
{
b = 1;//b每次循环后初始化为1,以便进行下列操作
a = num(n);
for (int j = 0; j < digit; j++)
{
b *= a;
}
sum += b;
n /= 10;
}
if (sum == c)
return 1;
return 0;
}
源码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int Judge(int n, int digit);//判断该数是否为水仙花数
int Digit(int n);//判断该数的位数
int num(int n);//分解该数的每一位
int main()
{
int digit = 0;
for (int i = 0; i < 100000; i++)
{
digit = Digit(i);
if (Judge(i, digit))
printf("%d ", i);
}
return 0;
}
int Judge(int n, int digit)
{
int a, b, sum = 0, c = n;
for (int i = 0; i < digit; i++)
{
b = 1;
a = num(n);
for (int j = 0; j < digit; j++)
{
b *= a;
}
sum += b;
n /= 10;
}
if (sum == c)
return 1;
return 0;
}
int Digit(int n)
{
int digit = 0;
while (n > 0)
{
digit++;
n /= 10;
}
return digit;
}
int num(int n)
{
n %= 10;
return n;
}
运行结果如下:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119609.html