PTA乙级初练:1002 写出这个数(C++)

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

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

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

解析:

  • 题目重述:一个数的各个位数的和的拼音
  • 注意:
  • max(Int) 2147483647 应该使用字符数组或者字符串存储所输入的数
  • 所存数字为字符型如何处理为整型?

思路:将字符串每个位置的字符进行对应的ASCII码转换

字符 ‘0’-‘9’ 对应的十进制整数是48~57,那么,将对应的整数减去48就得到了对应的整数或者 减去’0’

  • 如何对应的输出拼音?

利用字符数组按照下标对应创建拼音,依据此数去输出相应的结果

  • 如何按照最高位依次输出?

将结果转换为string类型 eg: sum=to_string(sum); 以sum[index]方式去索取单个字符。(蓝桥杯不支持c++11 即无法使用to_string等方法 )
解决办法:

#include<sstream>
>   // int 转 string
  int sum = 10;
  string str;
  stringstream ss;
  ss<<sum;
  ss>>str;

answer:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main()
{
    string n;
    int sum=0;
    int x;
    cin>>n;
    
    for (int i=0;i<n.length();i++)
    {
        sum=sum+n[i]-48;
    }
    string sum0;//存放转换为string类型的sum
    stringstream ss;
    ss<<sum;
    ss>>sum0;
    string result[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    for(int i=0;i<sum0.length();i++)
    {
        if(i!=0)
            cout<<" ";
        x=sum0[i]-'0';
        cout<<result[x];
    }
    
}

//第一次写 新手 多多指教

猜你喜欢

转载自blog.csdn.net/weixin_44916213/article/details/111321352