所謂 Armstrong Number 指的是一個 N 位數的整數,它的所有位數的 N 次方和恰好等於自己。
如:1634 = 14 + 64 + 34 + 44
請依題目需求在一定範圍內找出該範圍內的所有 Armstrong Numbers。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入共一行包含兩個數字 N 和 M (N < M、N > 0、M <= 1000000),代表尋找 Armstrong Number 的範圍。 | 將所有範圍內的 Armstrong Number 依序由小到大輸出,如果沒有找到請輸出 「none」。 |
100 999 | 153 370 371 407 |
10 99 | none |
解題思路
使用 For 迴圈從 N 跑到 M 一一檢查。可以將數字轉換成字串來進行阿姆斯壯數的判斷。將得到的阿姆斯壯數存到一個陣列/Vector中,判斷如果 Vector 的 Size 為 0 則輸出 none,反之則將 Vector 中的資料輸出。
範例程式碼-ZeroJudge A040: 阿姆斯壯數
#include <iostream>
#include <math.h>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<int>num;
for (int i = N; i<=M; i++)
{
string str = to_string(i);
int sum = 0;
int len = str.size();
for (int j = 0; j<str.size(); j++)
{
sum += pow(str[j] - '0', len);
}
if (sum == i) num.push_back(i);
}
sort(num.begin(), num.end());
if (num.size() == 0) cout << "none" << endl;
else
{
for (int i = 0; i<num.size(); i++)
{
cout << num[i] << " ";
}
}
}
//ZeroJudge A040
//Dr. SeanXD