題目敘述
每筆輸入有兩個正整數N和M,要求輸出N到M之間 (包含N和M) 的「阿姆斯壯數」。如果該區間沒有阿姆斯壯數的話請輸出none (詳情請見輸入/輸出範例)。
阿姆斯壯數解釋:一個N位數的整數,它的所有位數的N次方和恰好等於自己。
例子:1634 = 1^4 + 6^4 + 3^4 + 4^4
範例輸入 #1
100 999
範例輸出 #1
153 370 371 407
範例輸入 #2
10 99
範例輸出 #2
none
解題思路
使用For迴圈從N跑到M依依檢查。可以將數字轉換成字串來進行阿姆斯壯數的判斷 (詳情請見範例程式碼)。將得到的阿姆斯壯數存到一個陣列/Vector中,判斷如果Vector的Size為0則輸出none,反之則將Vector中的資料輸出。
解題程式碼如下 (僅供參考):
#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] << " ";
}
}
}
留言
張貼留言