Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 양의 정수를 단어로 표현하는 프로그램

<시간/>

양의 정수가 주어졌다고 가정합니다. 숫자를 단어로 입력해야 합니다. 숫자 "56"이 입력으로 주어지면 출력은 "Fifty-Six"가 됩니다. 변환 범위는 최대 10억입니다.

따라서 입력이 입력 =5678과 같으면 출력은 오천육백칠십팔이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 다음과 같은 쌍을 포함하는 배열 '숫자' 정의 - {{"Billion", 1000000000},
    • {"백만", 1000000},
    • {"천", 1000},
    • {"백", 100},
    • {"구십", 90},
    • {"팔십", 80},
    • {"일곱", 70},
    • {"육십", 60},
    • {"오십", 50},
    • {"40", 40},
    • {"서른", 30},
    • {"스물", 20},
    • {"열아홉", 19},
    • {"열여덟", 18},
    • {"세븐틴", 17},
    • {"십육", 16},
    • {"열다섯", 15},
    • {"십사", 14},
    • {"열세", 13},
    • {"열두", 12},
    • {"일레븐", 11},
    • {"십", 10},
    • {"나인", 9},
    • {"8", 8},
    • {"일곱", 7},
    • {"6", 6},
    • {"5", 5},
    • {"4", 4},
    • {"3", 3},
    • {"둘", 2},
    • {"하나", 1}}
  • solve() 함수를 정의합니다. 입력이 필요합니다.
    • 입력이 0과 같으면 -
      • "0" 반환
    • 배열 번호의 각 숫자에 대해 다음을 수행합니다.
      • num <=의 두 번째 값이 입력되면 -
        • num의 두 번째 값>=100이면 -
          • result :=solve(입력/숫자의 두 번째 값)
          • if input> (input / num의 두 번째 값) * m의 두 번째 값이면 −
            • result :=result + " " + solve(input - (입력/숫자의 두 번째 값))
        • 그렇지 않으면
          • result :=num의 첫 번째 값 + ((input> num의 두 번째 값인 경우:" " + solve(input - num의 두 번째 값), 그렇지 않은 경우:" "))
        • 루프에서 빠져나오기
    • 반환 결과
  • 풀다(입력)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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