输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
思路
我的代码
#include<iostream>
using namespace std;
#include<vector>
#include<string>
#include<algorithm>
int main()
{
vector<char>vec;
bool flagy = false;
int countz = 0;
char a[10];
char b[5] = { 'S','B','Q','W','Y' };
for (int i = 0; i < 10; i++)
{
a[i] = 'a' + i;
}
string str;
cin >> str;
if (str.size() == 9)
{
char c = str[0]; //第一段 以亿结尾单位(Y)
int tmp = c - '0';
vec.push_back(a[tmp]);
vec.push_back(b[4]);
bool preFlag = false;
int n =2;
for (int i = 1; i < 5; i++) //第二段 以万结尾单位(W)
{
char c = str[i];
int tmp = c - '0';
vec.push_back(a[tmp]);
if (tmp != 0)
{
flagy = true;
if(i<4)
vec.push_back(b[n]); //最后一个单位不在这里设置
}
n--;
}
if(flagy)
vec.push_back(b[3]); //全0的话不设置最后一个单位(W)最后一个单位不在这里设置
if (vec[vec.size() - 2] == 'a') //如果第二段末尾有0的话需要插入一个0;比如10100001
{
vec.push_back('a');
}
int count = 2;
for (int i = 5; i < 9; i++) //第三段 以S||B||Q结尾单位
{
char c = str[i];
int tmp = c - '0';
vec.push_back(a[tmp]);
if (tmp != 0 &&i!=8)
{
vec.push_back(b[count]);
}
count--;
}
}
else if (str.size() > 4 && str.size() < 9)
{
flagy = false;
int sg = str.size() - 6;
for (int i = 0; i < str.size()-4; i++)
{
char c = str[i];
int tmp = c - '0';
vec.push_back(a[tmp]);
if (tmp != 0 && sg>=0)
{
vec.push_back(b[sg]);//添加单位
}
sg--;
}
vec.push_back(b[3]); // 以万结尾单位(W)
if (vec[vec.size() - 2] == 'a')
{
vec.push_back('a');
}
int count = 2;
for (int i = str.size()-4; i < str.size(); i++)
{
char c = str[i];
int tmp = c - '0';
vec.push_back(a[tmp]);
if (tmp != 0 && i <str.size()-1)
{
vec.push_back(b[count]); //以S||B||Q结尾单位
}
count--;
}
}
else if (str.size() > 0 && str.size() <= 4)
{
int count = 2;
int len = str.size();
for (int i = 0; i < len; i++)
{
char c = str[i];
int tmp = c - '0';
vec.push_back(a[tmp]);
if (tmp != 0 && i <len - 1)
{
vec.push_back(b[count]); //以S||B||Q结尾单位
}
count--;
}
}
std::reverse(vec.begin(), vec.end()); //删掉尾部是连续的0
bool flag = false;
int count = 0;
vector<char>vec1;
for (int i = 0; i < vec.size(); i++)
{
if (vec[0] == 'a' && vec.size() != 1 &&i==0)
{
flag = true;
}
if (flag == true)
{
if (vec[i] == 'a')
{
continue;
}
else
{
flag = false;
}
}
vec1.push_back(vec[i]);
}
std::reverse(vec1.begin(), vec1.end());
auto newend = unique(vec1.begin(), vec1.end(), [=](const char a, const char b) {
return a == b && a == 'a';
}); //连续多个0时保留一个0
vec1.erase(newend, vec1.end());
for (int i = 1; i < vec1.size() - 1; i++) //删除前面加入容器中的这种形式QaW
{
if (vec1[i] == 'a')
{
if (vec1[i - 1] >= 'A' && vec1[i - 1] <= 'Z' && vec1[i + 1] >= 'A' && vec1[i + 1] <= 'Z')
{
vec1.erase(vec1.begin() + i);
}
}
}
for (int i = 0; i < vec1.size(); i++)
{
cout << vec1[i];
}
}