PAT乙级(Basic)题库---1002

题目

1002-写出这个数

解题思路

由于该数最大为100位的十进制数,不能直接用整形读入,因此采用字符串的方式读入,读入的字符串中的每个字符通过减去字符‘0’的操作得到真正的整数值,再来累加获得各位和。由于最大为100位的十进制数,各位和最大为999,得到的和结果不会超过1000,基本上得到和结果的各位可以直接输出,只是要注意和结果首位(百位或十位)为零的特殊情况就好。

代码

#include<iostream>
#include<string.h>
#include<cstring>
using namespace std;

//将个位数转换为拼音显示
void tran(int unit)
{
    switch(unit)
    {
        case 0:
        cout<<"ling";
        break;
        case 1:
        cout<<"yi";
        break;
        case 2:
        cout<<"er";
        break;
        case 3:
        cout<<"san";
        break;
        case 4:
        cout<<"si";
        break;
        case 5:
        cout<<"wu";
        break;
        case 6:
        cout<<"liu";
        break;
        case 7:
        cout<<"qi";
        break;
        case 8:
        cout<<"ba";
        break;
        case 9:
        cout<<"jiu";
        break;
    }
}
void conv(int num)
{
    //得到各位数字,百位,十位和各位
    int hundreds,decade,unit;
    hundreds=num/100;
    decade=num%100/10;
    unit=num%100%10;

    //百位不为零
    if(hundreds)
    {
    tran(hundreds);
    cout<<" ";
    tran(decade);
    cout<<" ";
    tran(unit);
    cout<<"\n";
    }

    //百位为零,十位不为零
    else if(decade)
    {
        tran(decade);
    cout<<" ";
    tran(unit);
    cout<<"\n";
    }

    //百位和十位均为零
    else
    {
    tran(unit);
    cout<<"\n";
    }    
}
int main()
{
    string a;
    int sum;
    while(cin>>a)
    {
        sum=0;
        for(int i=0;i < a.length();i++)
        {

            //计算各位和,读入的是字符串,减字符‘0’
            sum+=(a[i]-'0');

        }   

        //将结果以拼音输出
        conv(sum);
    }
}

猜你喜欢

转载自blog.csdn.net/h928066986/article/details/74937915