首页 > 编程知识 正文

四位数的四叶玫瑰数,水仙花数四叶玫瑰数

时间:2023-05-05 21:18:56 阅读:278940 作者:2454

四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数。  四叶玫瑰数共有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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。