太菜了,改了无数次,而且方法复杂的一批。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
//cout << "请输入一个不超过9位的非负整数:" << endl;
cin >> s;
//分别定义两个拾百千万以及最后的亿
char unit[10] = { NULL,NULL,'S','B','Q','W','S','B','Q','Y' };
//定义0-9分别对应的a-j
char num[10] = { 'a','b','c','d','e','f','g','h','i','j' };
//对只有一位单独考虑
if (s.length() == 1) {
cout << num[s[0] - 48];
}
else {
int length = s.length();
int k = 0;//用来记录循环的次数
if (s[0] != '0') {
for (auto ch : s) {
if (ch != '0') {
cout << num[ch - 48] << unit[length];
--length;
++k;
}
else {
if (s[k + 1] != '0' ) { //&& ((k + 1) <= length)
if (s.length() - (k+1) != 4) {
if ((k + 1) != s.length()) {
cout << char(ch + 49);
--length;
++k;
}
else {
--length;
++k;
}
}
else {
cout << 'W';
--length;
++k;
}
}
//考虑当当前项为0且下一项也为0时,主要是这两种情况的考虑800 0701,800 7021
else {
if (s.length() - (k+1) != 4) {
--length;
++k;
}
else {
cout << 'W';
--length;
++k;
}
}
}
}
}
}
return 0;
}
//第一次提交,格式错误,只能用NULL来表示空字符串
//不超过亿,中间连续多0的情况
//正常中间0
//当从4位以上过度到4位以下时,要多加w这就是我的代码的问题
//第二次提交,仍然有第二个,不超过万,末尾多0情况