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

2021-10-16//水仙花数

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

2021-10-16//水仙花数


/*题目:    
水仙花数

类别
流程控制

时间限制    
2S

内存限制    
10000Kb

问题描述    
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明    
输入由两个整数a和b构成,a和b之间用空格分隔。0
#include
int function(int a,int b)
{	
	int i,u;
	int n=0;
	for(i=a;i<=b;i++)
	{
		if(a<100)
		{
			a=100;
		}


		int sum = 0;//这里对i的数位进行判断
		u = i;//将i的值赋值给u防止do-while操作对i本身造成影响
		do
		{
			sum++;
			u/=10;
		}
		while(u);


		if(sum == 3)
		{
			if(pow(i%10,sum)+pow((i/10)%10,sum)+pow(i/100,sum)==i)
			{
				n++;
			}
		}
		else if(sum == 4)
		{
			if(pow(i%10,sum)+pow((i/10)%10,sum)+pow((i/100)%10,sum)+pow((i/1000),sum)==i)
			{
				n++;
			}
		}//这两段判断太过麻烦可以用while代替
	}
	return n;
}

int main()
{
	int x,y;
	scanf("%d %d",&x,&y);
	printf("n%d",function(x,y));
}

可以用while循环代替上文对sum==3或4的判断,更加便捷(别老惦记着你那if条件判断)

#include 
#include 
int function(int a, int b)  //定义函数
{
	int i,cnt=0,p,q,r,sum=0,count=0;
	if(a<100)
		a=100; //如果位数小于三,就让它从三位数第一位100开始
	for(i=a;i<=b;i++){
		q=i;//赋值,等会i还要用
		r=i;//同上
		while(q!=0){
			p=q%10;
			cnt++;
			q/=10;
		} //求出该数的位数,以便作为次数
		while(r!=0){
			p=r%10;
			sum+=pow(p,cnt); //懂得都懂
			r/=10; 
		}
		if(sum==i){
			printf("%dn",i);
			count++;  //相等那此区间上水仙花数数量就加一
		}
		sum=0; //归零,归零,归零
		cnt=0; //归零,归零,归零
	}
	return count;
}
int main(){
	int a,b;
	scanf("%d %d",&a,&b); //区间
	printf("%d",function(a,b));
}

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

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

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