栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】每日一题,求水仙花数,求变种水仙花数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】每日一题,求水仙花数,求变种水仙花数

1. 求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
#include 
#include 
int main()//求水仙花数
{
	int a = 0;
	int mai = 0;
	for (a = 0; a < 100000; a++)
	{
		int b = a;
		int c = 0;
		int sum = 0;
		while (b>0)
		{
			c++;//利用c统计a的位数
			b/=10;
		}
		b = a;
		while (b > 0)
		{
			int ca = (int)pow(b % 10, c);//pow是用来求次方的库函数,其返回值是double类型
			sum += ca;
			b /= 10;
		}
		if (sum == a)
		{
			printf("%d ", a);
			mai++;
		}
	}
	printf("找到水仙花数个数为%dn",mai);
}

此处我们用到了一个库函数pow,它的作用是求x的y次方。头文件math.h。当然也可以自己写一个函数去实现不必过于纠结。

其返回类型是一个double类型,在使用的过程中要注意, double pow(double x, double y)。

二、变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。 例如: 655 = 6 * 55 + 65 * 5 1461 = 1*461 + 14*61 + 146*1 求出 5位数中的所有 Lily Number。
#include 
int main()
{
    int a=0;
    for(a=10000;a<100000;a++)
    {
        int sum=0;
        int b=a;
        int cj=10;
        while(b>=10)
        {
            int k=a%cj;
            b/=10;
            sum += k*b ;
            cj*=10;
        }
        if(sum==a)
            printf("%d ",a);
    }
    return 0;
}

思路

以12345为例,我们需要求出1*2345+12*345+123*45+1234*5值与12345进行比较,所以我们可以让12345/10得到1234,%10得到5.除以100的到123,模上100的到45.除以1000的到12,模上1000的到345.沿着这个思路我们很简单就可以得到一个代码。然后我们只要加一个循环让它遍历我所想要找的区间就得到了答案。

此题属于简单题,巧用除跟模便可以解决。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号