c++解决四位玫瑰数/四叶玫瑰数的判断
四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数。
四叶玫瑰数共有3个:1634,8208,9474
前注:这次的代码写的很泛用,其实改一下就可以求所有的自幂数,但是这里还是主要针对的是四叶玫瑰数。
具体实现如下:
#include <iostream> 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; }