양의 정수가 주어졌다고 가정합니다. 숫자를 단어로 입력해야 합니다. 숫자 "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의 두 번째 값), 그렇지 않은 경우:" "))
- 루프에서 빠져나오기
- num의 두 번째 값>=100이면 -
- num <=의 두 번째 값이 입력되면 -
- 반환 결과
- 입력이 0과 같으면 -
- 풀다(입력)
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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