题解 | #学英语#字符串反转
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
void printBig(int n)
{
switch (n)
{
case 1:cout << " thousand "; break;
case 2:cout << " million "; break;
case 3:cout << " billion "; break;
}
}
void printTen(int n)
{
switch (n)
{
case 0:cout << "ten"; break;
case 1:cout << "eleven"; break;
case 2:cout << "twelve"; break;
case 3:cout << "thireen"; break;
case 4:cout << "fourteen"; break;
case 5:cout << "fifteen"; break;
case 6:cout << "sixteen"; break;
case 7:cout << "seventeen"; break;
case 8:cout << "eighteen"; break;
case 9:cout << "nineteen"; break;
}
}
void printMid(int n)
{
switch (n)
{
case 2:cout << "twenty"; break;
case 3:cout << "thirty"; break;
case 4:cout << "forty"; break;
case 5:cout << "fifty"; break;
case 6:cout << "sixty"; break;
case 7:cout << "seventy"; break;
case 8:cout << "eighty"; break;
case 9:cout << "ninety"; break;
}
}
void printNumber(int n)
{
switch (n)
{
case 1:cout << "one"; break;
case 2:cout << "two"; break;
case 3:cout << "three"; break;
case 4:cout << "four"; break;
case 5:cout << "five"; break;
case 6:cout << "six"; break;
case 7:cout << "seven"; break;
case 8:cout << "eight"; break;
case 9:cout << "nine"; break;
}
}
struct thrip
{
int value[3] = { 0 };
};
int main()
{
string str;
cin >> str;
reverse(str.begin(), str.end());
int index = 0,n = str.size(),posMap = 0,posNum = 0;
map<int, struct thrip*> number;
thrip* pTp = new thrip;
number[posMap] = pTp;
if (n > 1)
{
while (index < n)
{
pTp->value[posNum] = str[index] - '0';
index++;
posNum++;
if (posNum == 3)
{
posNum = 0;
posMap++;
pTp = new thrip;
number[posMap] = pTp;
}
}
for (int i = posMap; i >= 0; i--)
{
bool ishundred = false;
bool isNumber = false;
pTp = number[i];
if (pTp->value[2] > 0)
{
ishundred = true;
isNumber = true;
printNumber(pTp->value[2]);
cout << " hundred ";
}
if (pTp->value[1] > 0 || pTp->value[0] > 0)
{
if (ishundred)
cout << "and ";
if (pTp->value[1] > 1)
{
printMid(pTp->value[1]);
if (pTp->value[0] > 0)
{
cout << " ";
printNumber(pTp->value[0]);
}
}
else if (pTp->value[1] == 1)
{
printTen(pTp->value[0]);
}
else
printNumber(pTp->value[0]);
isNumber = true;
}
if (i > 0 && isNumber)
{
printBig(i);
}
}
}
else
cout << "zero";
return 0;
}
像处理数字文本这种题,感觉字符串反转之后更好做一点。
字符串按每三位字符处理,然后用结构体去接受处理的字符串,输出的时候也根据结构体来,有百位输出百位and,是千分位的结构体就在最后输出thousand
查看14道真题和解析