题目链接:7-23 币值转换
一. 题目
1. 题目
2. 输入输出样例
3. 限制
二、代码
1. 代码实现
#include <iostream>
#include <string>
using namespace std;string numStr[] = { // 0-9对应的字符串(字符串是方便string++)"a", "b", "c", "d" , "e" , "f", "g", "h", "i", "j"
};string Str2[] = { //对应小于1万、万和亿"", "W", "Y"
};// 将4位数转换为字符串
string numToStr(int num) {bool zero = false;string str = "";if (num > 999) { //千位str += numStr[num / 1000] + "Q";num = num % 1000;}if (num > 99) { //百位str += numStr[num / 100] + "B";num = num % 100;} else if (str.length() > 0) {zero = true; // 标记存在中间0 (处理中间0的情况,如1099)}if (num > 9) { //十位if (zero) {str += numStr[0]; // 加上0对应的字符zero = false; // 恢复中间0的判断}str += numStr[num / 10] + "S";num = num % 10;} else if (str.length() > 0) {zero = true;}if (num > 0) { // 个位if (zero) {str += numStr[0];}str += numStr[num];}return str;
}int main(void) {unsigned int num, i, tempNum;bool zero = false;string str, tempStr;cin >> num;str = tempStr = "";i = 0;while (num > 0) {tempNum = num % 10000; // 每次转换4位数tempStr = numToStr (tempNum);if (tempNum > 0) {tempStr = tempStr + Str2[i]; // 加上对应的单位,例如xxxx万if (zero) {tempStr += numStr[0];zero = false;}if (tempNum < 1000) {zero = true; // 标记存在中间0 (处理中间0的情况,如1万零9百)}} else {zero = true; // 标记存在中间0 (处理中间0的情况,如1亿零9千)}str = tempStr + str;num /= 10000;i++;}if (str.length() == 0) { // 为0的情况str = numStr[0];}cout << str << endl;return 0;
}