a040 - 阿姆斯壯數
題目描述
題目要求在給定的範圍 [n, m] 內找出所有阿姆斯壯數。阿姆斯壯數是指一個 n 位數的整數,其各位數字的 n 次方和等於該數本身。
解題思路
程式碼使用窮舉法,從 n 開始迭代到 m。對於每個數字 a,計算其位數 y,然後計算各位數字的 y 次方和 sum。如果 a 等於 sum,則輸出 a。如果範圍內沒有找到阿姆斯壯數,則輸出 "none"。
複雜度分析
- 時間複雜度: O(m * log10(m))。對於每個數字
a(從 n 到 m),計算位數和各位數字的次方和需要 O(log10(a)) 的時間,因此總時間複雜度為 O((m - n) * log10(m)),近似為 O(m * log10(m))。 - 空間複雜度: O(1)。程式碼只使用了常數級別的額外空間。
程式碼
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main (){
long long int a,b=0;
long long int x,y=0;
long long int sum=0;
bool n=false;
while(cin >> a >> b){
while(a<=b){
x=a;
while(x>0){
x/=10;
y++;
}
x=a;
while(x>0){
sum+=pow(x%10,y);
x/=10;
}
if(a==sum){
cout << sum << " " ;
n=true;
}
sum=0;
y=0;
a++;
}
if(n==false){
cout << "none" << endl;
}
else if(n==true){
cout << endl;
}
n=false;
}
}