欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

“水仙花数”和“完数”的实现

程序员文章站 2022-05-12 12:28:25
...

例题来源:谭浩强《C语言程序设计》第五版:习题5.8
输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=1^ 3+ 5^ 3+ 3^3。
该题让输出所有水仙花数,首先我们知道它的范围肯定是>100||<1000,这才是三位数。那我们可以这样思考,先写出一个函数判断一个数到底是不是水仙花数,然后再利用这个函数循环一下100~1000的数字,便能得到所有水仙花数了。
判断是否为水仙花数的函数我们用bool类型来写,函数Isflower用来判断是否为符合条件的数。先取个位又是这个问题(n%10)来实现,再扔掉个位(n/10)来实现,他们取下来的每一位立方再相加。代码如下。

bool Isflower(int n)
{
    int a=0;
    int tmp=0;
    int m=n;
    for(int i=1;1<=n;i++)
    {
        a=n%10;
        n/=10;
        tmp+=a*a*a;
    }
    return tmp==m;
}
int main()
{
    for(int i=100;i<1000;i++)
    {
        if(Isflower(i))
        {
            printf("%d\n",i);
        }
    }
    return 0;
}

注意: a和tmp的定义很容易想到。当我们写道函数结尾写返回值的时候,发现n是变化的应该定义一个m(当然也可以是其他的)来存放n最开始的值,进入循环n开始变化。返回tmp和和三位数立方相等的情况。

上面写了水仙花数还有一个数字叫完数
例题来源:谭浩强《C语言程序设计》第五版:习题5.9
一个数如果恰好等于它的因子之和,称这个数为“完数”。例如:6的因子为1,2,3,而6=1+2+3。因此6是“完数”。编程找出1000以内的所有完数,并按照下列格式输出其因子:
6 its factors are 1,2,3

思考思路相同,我们先来考虑一下,写一个函数用来判断一个数字它是还不是完数。
这里没有写出测试用例,bool类型是则1否则0

bool Isperpectnum(int n)
{
    int sum=0;
    for(int i=1;i<n;i++)
    {
        if(n%i==0)
        {
            sum+=i;
        }
    }
    return sum==n;
}

接下来要实现这个格式,代码如下。

void Show(int n)
{
	printf("%d its factors are",n);
	for(int i=2;i<n;i++)
	{
		if(n%i==0)
		{
			printf(" %d",i);
		}
	}
	printf("\n");
}

下面是主函数,调用了两个自己写的函数完成题目要求,代码如下。

int main()
{
for(int i=1;i<1000;i++)
	{
		if(Isperpectnum(i))
		{
			Show(i);
		}
	}
}

三个结合在一起即可完成题目要求
实现后运行结果如下“水仙花数”和“完数”的实现
今天就是这些内容,有问题,希望多提出来,可以私信我。

相关标签: 水仙花数 完数