L1-007. 念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如: 1234 。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling
解题思路:
先用一个二维的字符数组来标记0-9对应的拼音。然后对n进行判断,因为题目表明会有负数,零和正数,所以,当为负数时先输出fu,然后令为相反数,为零时直接输出ling,之后就处理正数的情况,注意,用取余的方法得到的序列是反向的,所以要从ans数组的末尾开始读。注意行末不要有空格。
PS:虽然题目说明了是整数,但是参考别人的解法,用字符串接收也是可以的,输出也很简便。
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
char change[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
int n;
vector<int>ans;
scanf("%d",&n);
if(n<0){
printf("fu ");
n=-n;
}
if(n==0){
printf("ling");
}else{
do{
ans.push_back(n%10) ;
n/=10;
}while(n);
for(int i=ans.size()-1;i>=0;i--){
printf("%s",change[ans[i]]);
if(i>0)
printf(" ");
}
}
return 0;
}
字符串解法
#include<cstdio>
#include<iostream>
using namespace std;
char change[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
string s;
cin>>s;
int i=0,len=s.length() ;
if(s[0]=='-'){
printf("fu ");
i++;
}
for( ;i<s.length() ;i++){
cout<<change[s[i]-'0'];
if(i<s.length()-1)
printf(" ");
}
return 0;
}