c++解决四位玫瑰数/四叶玫瑰数的判断

四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数。 

四叶玫瑰数共有3个:1634,8208,9474

前注:这次的代码写的很泛用,其实改一下就可以求所有的自幂数,但是这里还是主要针对的是四叶玫瑰数。

具体实现如下:

#include 
using namespace std;

bool isRose(int num);                            //判断是否为四位玫瑰数的函数原型说明
int checkNumber(int num);                        //求所输入数字的位数函数的函数原型说明
int main(){
	int a, b, flag = 1;
	cin >> a >> b;
	if (checkNumber(a) != 4){                    //如果上限a不是四位数
		cout << a << "不是四位数!" << endl;
	}
	if (checkNumber(b) != 4){                    //如果下限b不是四位数
		cout << b << "不是四位数!" << endl;    
	}
	for (int i = a; i <= b; i++){                //循环求出a,b区间中的所有四位玫瑰数
		if (isRose(i)){
			cout << i << endl;
			flag = 0;                            //flag用于标记有无输出四位玫瑰数,0表示输出过
		}
	}
	if (checkNumber(a) == 4 && checkNumber(b) == 4 && flag){
                                                 //如果a,b是四位数,但是却没输出过四位玫瑰数
		cout << "此区间没有四位玫瑰数!" << endl;
	}
}

bool isRose(int num){									//判断一个数是否为四位玫瑰数
	if (checkNumber(num) != 4)return false;
	int arr1[100] = { 0 }, weishu = 0, sum = 0;
	for (int i = 1, num1 = num, shuzu = 0; num / i; i = (i * 10)){	//这个循环用于获得num的每一位,当num/i==0时结束,i每过一次循环都会大10倍
		//当num为一位时 循环进行一次 当num为两位 两次 三位 三次
		arr1[shuzu] = num1 % 10;									//依次获得从个位开始的每一位并且存入数组中
		num1 = num1 / 10;
		weishu++;													//循环进行一次,表明位数需要加一
		shuzu++;													//shuzu用于标记数组的下标,++使它存到数组的下一位
	}
	for (int i = 0; i < weishu; i++){					//有多少位,进行多少次循环,即加多少位
		sum = sum + arr1[i] * arr1[i] * arr1[i] * arr1[i];
	}
	if (sum == num){									//如果sum==num,则下结论num是四位玫瑰数
		return true;
	}
	else{
		return false;
	}
}
int checkNumber(int num){                        //求所输入数字的位数
	int weishu = 0;
	for (int i = 1, num1 = num, shuzu = 0; num / i; i = (i * 10)){
		//当num为一位时 循环进行一次 当num为两位时 两次 ,三位时 三次
		num1 = num1 / 10;
		weishu++;								//循环进行一次,位数加一
	}
	return weishu;
}

你可能感兴趣的:(c++解决问题,c++)