一、题目
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
二、想法
1.读入一个正整数n,计算各位数字之和。
计算的是各位数字之和,所以不需要int类型来存储,还需要一个个提。使用string来储存方便直接读取各位数字。
//读取用户输入
string num;
cin>>num;
2.计算各位数字之和
因为是计算各位数字之和,所以我们需要用int类型来累加。
“各位”的遍历使用循环,并用string类里的size()来判断结束。
用string类型来接收输入的,那么我怎么从string里的一个字符转为数字呢?答案是string[0]输出的单个字符,可以用ascii码来进行转换。
//用来累加的数字
nt tempnum = 0;
//使用循环进行累加
for(int i = 0; i < num.size();i++)
{
//使用ascii码进行转换
tempnum += num[i] - '0';
}
3.用汉语拼音
使用汉语拼音,看上文中的输出样例可知,1就是“yi”,2就是“2”,所以使用固定数组即可;
//因为累加的tempnum为10进制
string name[10] ={"ling","er","san","si","wu","liu","qi","ba","jiu"};
4.如何读取累加好的的各位数字呢?
//使用to_string可直接将int类型转为string
string temp = to_string(tempnum);
也可以使用取模的方式取出各位数字装进容器内,使用反向迭代器也可以打印。
5.根据temp来打印拼音.
for(int i = 0; i < temp.size(); i++)
{
cout << name[temp[i] - '0'];
}
三、代码实现
#include <iostream>
using namespace std;
#include <string>
int main() {
//拼音库
string name[10] = {
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"
};
//用户输入
string num;
cin >> num;
//用来累加的数
int tempnum = 0;
//循环累加
for(int i = 0; i < num.size(); i++)
{
//使用ascii码进行转换
tempnum+= num[i] - '0';
};
//int 转 string 好提取
string temp = to_string(tempnum);
//循环打印
for(int i = 0; i < temp.size();i++)
{
//使用ascii码转换输出拼音
cout << name[(temp[i]-'0')] ;
//最后一下不空格
if(i !=(temp.size()-1))
{
cout << " ";
};
};
}