PAT乙级 | 1002 写出这个数

题目要求

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789
复制代码

输出样例:

yi san wu
复制代码

算法 1

分析

1. 用string接收输入,string中每一位数字累加得到sum

2. 用 sum%10,sum/10循环,得到sum的每一位数并存在数组a[ ]中

3. 倒叙输出(把数字和之前的空格看作一个整体)

C++

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    string s;
    cin >> s;

    int sum = 0;
    //求和
    //当成字符类型读入,转换成数字类型要减去0的ASCii码
    for(int i = 0; i < s.length(); i++)
    {
        sum += s[i] - '0';
    }
    
    int a[10];
    int t = 0;
    //利用a[]存储sum从低到高各位数字
    while(sum)
    {
        a[t] = sum % 10;
        sum /= 10;
        t++;
    }

    //输出是从高位到低位,索引从t-1开始而不是t
    cout << str[a[t-1]];
    for(int i = t-2; i >= 0; i--)
    {
        cout << " " << str[a[i]];
    }
    return 0;
}
复制代码

算法 2

分析

1. 用string接受输入,string中的每一位相加求和得到sum (int类型)

2. 将int类型转换成string类型

3. 从高位到低位输出每一位对应的中文拼音

C++

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    string s;
    cin >> s;

    int sum = 0;
    //求和
    //当成字符类型读入,转换成数字类型要减去0的ASCii码
    for(int i = 0; i < s.length(); i++)
    {
        sum += s[i] - '0';
    }

    string s2;
    stringstream ss;
    ss << sum;
    ss >> s2;

    for(int i = 0; i < s2.length(); i++)
    {
        if(i != 0) cout << " ";
        cout << str[s2[i]- '0'];
    }

    return 0;
}
复制代码

注意点

如果是字符类型的,在数组或者求和当作普通数字使用的要和0的ASCII码相减**。**

stringstream类

头文件:

<sstream>
复制代码

(1). 将int类型转化成string类型

    int num;
    stringstream ss;
    string str;
    ss << num;
    ss >> str;  //将int转为string类型
复制代码

(2). 将string类型转换成int类型

    string str = "17";
    stringstream ss;
    int num;
    ss << str;
    ss >> num; //将string类型转为int类型
    cout << ++num; //num = 18
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享