其他分享
首页 > 其他分享> > xdoj多位水仙花数

xdoj多位水仙花数

作者:互联网

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

#include<stdio.h>
#include<math.h>
int a,b,index, variable, variable_1, index_1, index_2, index_3, index_4,sum;
int function(int a, int b);//声明函数
int main(void)
{
	scanf_s("%d%d", &a, &b);
	printf("%d", function(a,b));
	return 0;
}
int function(int a,int b)//定义函数开始
{
	//int index, variable, variable_1, index_1, index_2, index_3, index_4, sum;
	sum = 0;
	index_1= 0;//数字的位数
	index_2 = 0;//水仙花数的counter
    variable = index;
	variable_1 = index;//index是具体数字,求index_1时会将index改变,在此提前保存。
	for (index = a; index <= b; index += 1)//范围
	{
		while (index != 0)
		{
			index /= 10;
			index_1 += 1;
		}//求出位数
		index = variable;//恢复数据
		if (index_1 > 2)//小于2位不是水仙花数
		{
			for (index_4 = 0; index_4 < index_1; index_4 += 1)
			{
				index_3 = variable % 10;//求出各位
				sum += pow(index_3, (double)index_1);//计算
				variable /= 10;
			}
			if (sum == variable_1)//比较结果
				index_2 += 1;
		}
		if (index_1 <= 2)
		{
			index_2 += 0;
		}
	}
	return index_2;
}

此题难点在于

求数位不容易想到,并且过程会改变数据,不注意会进入死循环。

所以,尽管代码可以使用更少的变量,但还是用多个变量保存数值,以免引起错误

/*仅记录个人学习过程,不对内容准确性负责*/

标签:function,多位,index,int,sum,xdoj,variable,水仙花
来源: https://blog.csdn.net/qq_34028041/article/details/120798626