Giả sử chúng ta được cho một số nguyên dương. Chúng ta phải đánh vần số bằng chữ; giống như nếu một số "56" được đưa ra làm đầu vào, đầu ra sẽ là "Năm mươi sáu". Phạm vi chuyển đổi lên đến một tỷ.
Vì vậy, nếu đầu vào giống như input =5678, thì đầu ra sẽ là Năm nghìn sáu trăm bảy mươi tám.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một mảng 'số' có chứa các cặp như - {{"Billion", 1000000000},
- {"Triệu", 1000000},
- {"Ngàn", 1000},
- {"Trăm", 100},
- {"Chín mươi", 90},
- {"Tám mươi", 80},
- {"Bảy mươi", 70},
- {"Sixty", 60},
- {"Năm mươi", 50},
- {"Bốn mươi", 40},
- {"Ba mươi", 30},
- {"Hai mươi", 20},
- {"Mười chín", 19},
- {"Mười tám", 18},
- {"Mười bảy", 17},
- {"Mười sáu", 16},
- {"Mười lăm", 15},
- {"Mười bốn", 14},
- {"Mười ba", 13},
- {"Mười hai", 12},
- {"Mười một", 11},
- {"Ten", 10},
- {"Chín", 9},
- {"Tám", 8},
- {"Bảy", 7},
- {"Sáu", 6},
- {"Năm", 5},
- {"Bốn", 4},
- {"Ba", 3},
- {"Hai", 2},
- {"Một", 1}}
- Xác định một hàm giải quyết (). Điều này cần đầu vào.
- nếu đầu vào giống 0, thì -
- trả về "Zero"
- đối với mỗi num trong số mảng, hãy thực hiện
- nếu giá trị thứ hai của đầu vào num <=, thì -
- nếu giá trị thứ hai của num> =100, thì -
- kết quả:=giải quyết (giá trị đầu vào / thứ hai của num)
- nếu đầu vào> (đầu vào / giá trị thứ hai của num) * giá trị thứ hai của m, thì -
- kết quả:=kết quả + "" + giải quyết (đầu vào - (giá trị đầu vào / thứ hai của num))
- nếu không,
- kết quả:=giá trị đầu tiên của num + ((nếu đầu vào> giá trị thứ hai của num, thì:"" + giải (đầu vào - giá trị thứ hai của num), ngược lại:""))
- Thoát khỏi vòng lặp
- nếu giá trị thứ hai của num> =100, thì -
- nếu giá trị thứ hai của đầu vào num <=, thì -
- trả về kết quả
- nếu đầu vào giống 0, thì -
- giải quyết (đầu vào)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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; }
Đầu vào
5678
Đầu ra
Five Thousand Six Hundred Seventy Eight