网站开发培训学院/苏州百度快速排名优化
我们用C++输出对应的水仙花数,水仙花数是指该数字的每一位的自幂之和等于该数字本身,又称为自恋数。
而我们需要输出所需求位数的水仙花数,所以不能单纯的对于已知位数判断。我们就需要先判断其位数。
int ws = 0; int sz = number;while (sz != 0){sz /= 10;ws++;}
判断位数后要判断该数字是否为水仙花数就要对其每个位数加和
int H = 0;int SZ = number;while (SZ != 0){int MS = SZ % 10; H += pow(MS, ws);SZ /= 10;}if (H == number)return 1;elsereturn 0;
最后函数设定为
int narcissistic(int number){int ws = 0; int sz = number;while (sz != 0){sz /= 10;ws++;}int H = 0;int SZ = number;while (SZ != 0){int MS = SZ % 10; H += pow(MS, ws);SZ /= 10;}if (H == number)return 1;elsereturn 0;}
之后就是数值区间了输入对应位数例如:4 那么区间取值就为1000-10000在这个区间内的所有数值都进行判断然后输出。
int main()
{for (;;){int a, x, iCount, i;cout << "输入水仙花数位数:"; cin >> x;a = pow(10, x), iCount = pow(10, (x - 1));if (x >= 3){for (i = pow(10, (x - 1)); i <= a; i++){iCount++;if (narcissistic(iCount) == 1){cout << iCount << endl;}}}else{cout << "输入错误请重新输入(大于3)" << endl;}}
}
最后完整代码为
#include <iostream>
using namespace std;
int narcissistic(int number);
int main()
{for (;;){int a, x, iCount, i;cout << "输入水仙花数位数:"; cin >> x;a = pow(10, x), iCount = pow(10, (x - 1));if (x >= 3){for (i = pow(10, (x - 1)); i <= a; i++){iCount++;if (narcissistic(iCount) == 1){cout << iCount << endl;}}}else{cout << "输入错误请重新输入(大于3)" << endl;}}
}int narcissistic(int number){int ws = 0; int sz = number;while (sz != 0){sz /= 10;ws++;}int H = 0;int SZ = number;while (SZ != 0){int MS = SZ % 10; H += pow(MS, ws);SZ /= 10;}if (H == number)return 1;elsereturn 0;}