1082中国語で数字を読む(25分)
アイデア
この文字列はもう少し難しく、コードは12ポイントです。
#include <bits/stdc++.h>
using namespace std;
int main()
{
char name[10][10]={
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string str;
cin>>str;
int len = str.length();
int len2 =len;
int start = 0;
if(str[0]=='-')
{
cout<<"Fu ";
start +=1 ;
len2-=1;
}
if(len2>8)
printf("%s Yi %s Qian %s Bai %s Shi %s Wan %s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48],name[int(str[start+4])-48],name[int(str[start+5])-48],name[int(str[start+6])-48],name[int(str[start+7])-48],name[int(str[start+8])-48]);
else if(len2==8)
printf("%s Qian %s Bai %s Shi %s Wan %s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48],name[int(str[start+4])-48],name[int(str[start+5])-48],name[int(str[start+6])-48],name[int(str[start+7])-48]);
else if(len2==7)
printf("%s Bai %s Shi %s Wan %s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48],name[int(str[start+4])-48],name[int(str[start+5])-48],name[int(str[start+6])-48]);
else if(len2==6)
printf("%s Shi %s Wan %s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48],name[int(str[start+4])-48],name[int(str[start+5])-48]);
else if(len2==5)
printf("%s Wan %s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48],name[int(str[start+4])-48]);
else if(len2==4)
printf("%s Qian %s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48],name[int(str[start+3])-48]);
else if(len2==3)
printf("%s Bai %s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48],name[int(str[start+2])-48]);
else if(len2==2)
printf("%s Shi %s",name[int(str[start])-48],name[int(str[start+1])-48]);
else if(len2==1)
printf("%s",name[int(str[start])-48]);
}
グループでの詳細な説明については、アルゴリズムノートを参照してください。
コードのスコアは満点ですが、バグがあります。0の先頭の数字は考慮されていません。この入力と出力は、明らかに不合理です。しかし、それは考慮されていないようです。0の場合を考えてみてください。
001
ling Bai ling yi
コード
#include <bits/stdc++.h>
using namespace std;
int main()
{
char name[10][10]={
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char wei[5][5] = {
"Shi","Bai","Qian","Wan","Yi"};
string str;
cin>>str;
int len = str.length();
int right =len-1;
int left = 0;
if(str[0]=='-')
{
cout<<"Fu";
left +=1 ;
}
while(left+4 <= right)
right -=4;
while(left <len)
{
bool flag =false;
bool print = false;
while(left<=right)
{
if(left>0 && str[left]=='0') //很神奇,left>0没有就出错
flag = true;
else
{
if(flag == true)
{
printf(" ling");
flag = false;
}
if(left>0) printf(" ");
printf("%s",name[str[left]-48]);
print = true;
if(left != right)
printf(" %s",wei[right-left-1]);
}
left ++;
}
if(print == true && right!=len-1)
printf(" %s",wei[(len-right-1)/4 + 2]);
right +=4;
}
}