C++程式:將正整數轉換為英文單詞


假設我們得到一個正整數。我們需要將這個數字用英文單詞拼寫出來;例如,如果輸入數字“56”,輸出將是“Fifty-Six”。轉換範圍最多為十億。

因此,如果輸入類似於 input = 5678,則輸出將是 Five Thousand Six Hundred Seventy-Eight。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個名為“numbers”的陣列,其中包含以下鍵值對:{{"Billion", 1000000000},
    • {"Million", 1000000},
    • {"Thousand", 1000},
    • {"Hundred", 100},
    • {"Ninety", 90},
    • {"Eighty", 80},
    • {"Seventy", 70},
    • {"Sixty", 60},
    • {"Fifty", 50},
    • {"Forty", 40},
    • {"Thirty", 30},
    • {"Twenty", 20},
    • {"Nineteen", 19},
    • {"Eighteen", 18},
    • {"Seventeen", 17},
    • {"Sixteen", 16},
    • {"Fifteen", 15},
    • {"Fourteen", 14},
    • {"Thirteen", 13},
    • {"Twelve", 12},
    • {"Eleven", 11},
    • {"Ten", 10},
    • {"Nine", 9},
    • {"Eight", 8},
    • {"Seven", 7},
    • {"Six", 6},
    • {"Five", 5},
    • {"Four", 4},
    • {"Three", 3},
    • {"Two", 2},
    • {"One", 1}}
  • 定義一個函式 solve()。它接收輸入。
    • 如果輸入等於 0,則:
      • 返回 "Zero"
    • 對於 numbers 陣列中的每個 num:
      • 如果 num 的第二個值小於等於輸入,則:
        • 如果 num 的第二個值大於等於 100,則:
          • result := solve(input / num 的第二個值)
          • 如果 input > (input / num 的第二個值) * num 的第二個值,則:
            • result := result + " " + solve(input - (input / num 的第二個值) * num 的第二個值)
        • 否則:
          • result := num 的第一個值 + ((如果 input > num 的第二個值,則: " " + solve(input - num 的第二個值),否則: " "))
        • 跳出迴圈
    • 返回 result
  • solve(input)

示例

讓我們看看下面的實現來更好地理解:

#include<bits/stdc++.h>

using namespace std;

vector<pair<string, int>> numbers{{"Billion", 1000000000},
   {"Million", 1000000},
   {"Thousand", 1000},
   {"Hundred", 100},
   {"Ninety", 90},
   {"Eighty", 80},
   {"Seventy", 70},
   {"Sixty", 60},
   {"Fifty", 50},
   {"Forty", 40},
   {"Thirty", 30},
   {"Twenty", 20},
   {"Nineteen", 19},
   {"Eighteen", 18},
   {"Seventeen", 17},
   {"Sixteen", 16},
   {"Fifteen", 15},
   {"Fourteen", 14},
   {"Thirteen", 13},
   {"Twelve", 12},
   {"Eleven", 11},
   {"Ten", 10},
   {"Nine", 9},
   {"Eight", 8},
   {"Seven", 7},
   {"Six", 6},
   {"Five", 5},
   {"Four", 4},
   {"Three", 3},
   {"Two", 2},
   {"One", 1}};
string solve(int input) {
   if (input == 0) return "Zero";
   string result;
   for (auto& num : numbers) {
      if (num.second <= input) {
         if (num.second >= 100) {
            result = solve(input / num.second) + " " + num.first;
            if (input > (input / num.second) * num.second)
               result += " " + solve(input - (input / num.second) * num.second);
         } else {
            result = num.first + (input > num.second ? " " + solve(input - num.second) : "");
         }
         break;
      }
   }
   return result;
}

int main() {
   cout<< solve(5678) <<endl;
   return 0;
}

輸入

5678

輸出

Five Thousand Six Hundred Seventy Eight

更新於:2021年10月19日

250 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.