PAT乙级1002 写出这个数 (20分) | C++实现

一、题目描述

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于10100

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

二、解题思路

从题目中我们可以看到,输入的数据是可以达到10100量级的,显然我们应该用字符串来处理输入数据。遍历字符串,利用变量sum来计算各位数字之和(不要忘记初始化),字符到数字的转化可以利用s[i] - ‘0’。

接着就是怎么按要求输出sum。由于在刚做这题的时候,本人还十分稚嫩并且头脑简单,所以用了一堆if else语句,使得代码十分冗长臃肿,但是本着记录自己的成长的想法,还是把这原始的代码附在文末。事实上,我们可以先建立一个字符串数组,存放每个数字的拼音。通过to_string()函数把sum转换成字符串,然后遍历这个字符串,对每个数字,输出对应下标的字符串即可。

三、AC代码

#include
#include
using namespace std;
int main()
{
     
    int sum=0;
    string s;
    //存储拼音
    string str[10] = {
     "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    cin >> s;
    //计算各位和
    for(int i=0; i<s.length(); i++)
    {
     
        sum += s[i] - '0';
    }
    //结果转换为字符串
    string ans = to_string(sum);
    //注意空格
    for(int j=0; j<ans.length(); j++)
    {
     
        if(j==0)    cout << str[ans[j]-'0'];
        else    cout << " " << str[ans[j]-'0'];
    }
    return 0;
}

愚蠢的自己:

#include
using namespace std;
int main()
{
     
    string str;
    cin >> str;
    int i = 0;
    int s = 0;
    int sum = 0;
    while(str[i])
    {
     
        s = str[i] - '0';
        sum += s;
        i++;
    }
    int sing;
    int ten;
    int hun;
    sing = sum%10;
    ten = (sum/10)%10;
    hun = sum/100;
    if(hun == 0)
    {
     
    }
    else if(hun == 1)
    {
     
        cout << "yi ";
    }
    else if(hun == 2)
    {
     
        cout << "er ";
    }
    else if(hun == 3)
    {
     
        cout << "san ";
    }
    else if(hun == 4)
    {
     
        cout << "si ";
    }
    else if(hun == 5)
    {
     
        cout << "wu ";
    }
    else if(hun == 6)
    {
     
        cout << "liu ";
    }
    else if(hun == 7)
    {
     
        cout << "qi ";
    }
    else if(hun == 8)
    {
     
        cout << "ba ";
    }
    else if(hun == 9)
    {
     
        cout << "jiu ";
    }
    if(sum/100 &&ten == 0)
    {
     
        cout << "ling ";
    }
    else if(ten == 1)
    {
     
        cout << "yi ";
    }
    else if(ten == 2)
    {
     
        cout << "er ";
    }
    else if(ten == 3)
    {
     
        cout << "san ";
    }
    else if(ten == 4)
    {
     
        cout << "si ";
    }
    else if(ten == 5)
    {
     
        cout << "wu ";
    }
    else if(ten == 6)
    {
     
        cout << "liu ";
    }
    else if(ten == 7)
    {
     
        cout << "qi ";
    }
    else if(ten == 8)
    {
     
        cout << "ba ";
    }
    else if(ten == 9)
    {
     
        cout << "jiu ";
    }
    if(sing == 0)
    {
     
        cout << "ling";
    }
    else if(sing == 1)
    {
     
        cout << "yi";
    }
    else if(sing == 2)
    {
     
        cout << "er";
    }
    else if(sing == 3)
    {
     
        cout << "san";
    }
    else if(sing == 4)
    {
     
        cout << "si";
    }
    else if(sing == 5)
    {
     
        cout << "wu";
    }
    else if(sing == 6)
    {
     
        cout << "liu";
    }
    else if(sing == 7)
    {
     
        cout << "qi";
    }
    else if(sing == 8)
    {
     
        cout << "ba";
    }
    else if(sing == 9)
    {
     
        cout << "jiu";
    }
    cout << endl;
    return 0;
}

你可能感兴趣的:(PAT,Basic)