ZeroJudge A040: 阿姆斯壯數

題目敘述

每筆輸入有兩個正整數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] << " ";
      }
  }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天