大一c语言试题:水仙花数计数

#include<stdio.h>
#include<math.h>
int function(int a,int b);

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

int function(int a,int b)
{
	int l,r,num=0,hook,wei,weinum,weinum_hook,c[5]; 
	double sum=0;
	//a,b 按大小排列 
	l = (a<b)? a:b;
	r = (a<b)? b:a;
	if(r<100) return 0;
	if(l<100) l=100;
	//抓取 a,b 间的数,判断抓取的数hook是否为水仙花数,若是,计数num+1 
	for (hook=l;hook<=r;hook++)
	{
		wei = hook;
		
		//判断抓取的数hook是否为水仙花数 
		for (weinum=1;wei!=0;weinum++)
		{
			//取所有尾数c[1~weinum] 
			c[weinum]=wei%10;
			wei/=10;
			if (wei==0)	break;
		}
		
		weinum_hook = weinum;
		
		for (sum=0;weinum_hook>=1;weinum_hook--)
		{
		    //算指数后的和sum 
			sum += pow(c[weinum_hook],weinum);
		}
		//若和与抓取的数相同,为水仙花数,计数num+1 
		if (int(sum) == hook)	num++;
				
	}
	return num;
}

  • 题目:水仙花数
  • 问题描述:水仙花数是指一个 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<a,b<10000
  • 输出说明:输出区间[a,b]或区间[b,a]上水仙花数的个数。
  • 输入样例:3 1000
  • 输出样例:4
  • 提示:a,b的位数n可能小于3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值