心得:
学会了如何实现字符串和数字的转化,
1.可以用<sstream>,但注意stringstream变量要在前面,
即ss << a;ss >> b;不能a >> s; b << s;
2.亦可以通过加减'0',但这种变法只限于这个字符是数字字符,如'2',但是变完只是字符,而不是字符串
数字变字符用+'0':int + '0',
字符变数字用-‘0’:char - '0';
字符串的length()和size()是一个意思,都是返回其长度
题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
这题在于字符串和数字的转化,使用<sstream>就可以做到,通过字符串,可将每一位的数字取到,然后再转成数字求和,最后再将和转成字符串,把和的每一位用switch输出即可
代码:
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
int sum = 0;
string str, temp;//str为接收输入的字符串变量,temp为存总和的字符串
cin >> str;
for(int i = 0; i < str.length(); i++)
{
sum += str[i] - '0';//直接转成数字
}
stringstream ss;
ss << sum;
ss >> temp;//ss一定要在前面
for(int i =0; i < temp.length(); i++)
{
switch(temp[i])
{
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;
}
if(i != temp.length() - 1)
{
cout << " ";
}
}
return 0;
}