ZeroJudge A040: 阿姆斯壯數

所謂 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 999153 370 371 407
10 99none

解題思路

使用 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

發佈留言