天梯赛 L1-007 念数字 (10分)

L1-007 念数字 (10分)

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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

答案1

#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

char s[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int maxn = 1010;

int main()
{
    char n[maxn];
    int i = 0;
    while(cin>>n){
        if(n[i] == '-'){
            printf("fu");
            i++;
        }
        int len = strlen(n);
        if(i == 1){                        //是负数
            while((len - 1) != 0){
            printf(" %s",s[n[i]-'0']);
            len--;
            i++;
            }
        }
        else{                          //不是负数
            while((len - 1) != 0){
            printf("%s ",s[n[i]-'0']);
            len--;
            i++;
            }
            printf("%s",s[n[i]-'0']);
        }
    }
    return 0;
}

犯困,判断过程有些复杂了,可以考虑函数式编程,但是空格的处理似乎也还是麻烦呢

答案2

更简单的方法

#include <iostream>

using namespace std;

int main(){
    string c[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    //不设数组, 直接用string输入字符串
    string s;
    cin>>s;
    int len = s.length();           //or strlen()
    int fu = s[0] == '-' ? 1 : 0;
    if(fu)
        cout << "fu";
    for(int i = fu; i < len; i++){        //这里i= fu,根据上一步fu直接给i赋值,比答案1更简单
        if(i == 0){
            cout << c[s[i]-'0'];
            continue;
        }
        cout << " " << c[s[i]-'0'];
    }
    return 0;
}
发布了44 篇原创文章 · 获赞 0 · 访问量 1337

猜你喜欢

转载自blog.csdn.net/qq_41664688/article/details/104133673