题目链接: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;
}