题目要求:
用户输入数字的位数,然后满足各个位数n次方相加等于该数字。(自幂数或者自恋数)
例如
算法思路:
- 输入位数n
- 计算n位数的起始值和终止值start =,end =,i=start;
- 分离出个位,十位,百位的值:m=i(参数代替保证值的不变);
- d=m%10(取个位);sum =sum+;
- m=m/10(重复取余步骤4)直到m=0停止;
- 判断sum =i,显示i;
#include<iostream> #include<cmath> using namespace std; int main() { int n, i, m, sum,d; int start, end; cout << "求n位自幂数,请输入位数:" << endl; cin >> n; while (n > 0) { start = pow(10, n - 1); end = pow(10, n) - 1; cout << n << "位自幂数"; for (i = start; i <= end; i++) { m = i; sum = 0; while (m != 0) { d = m % 10; sum = sum + pow(d, n); m = m / 10; } if (sum == i) { cout << i << " "; } } cout<< endl; cout << "求n位自幂数,请输入位数:"; cin >> n; } cout << endl; return 0; }
思路扩展:
c++中,int型变量能表示的最大正数为2147483647,它不过10位,那么有11,12,13位的自幂数吗?如果有如何计算,自幂数是有限的吗?有多少?