1002写出这个数
2019-08-20 本文已影响0人
advanced_slowly
读入一个正整数n,计算其各个数字之和,用汉语拼音写出和的每一位数字。
输入格式:保证自然数n小于10的100次方。
输出格式:在一行内输出n的各个数字之和的每一位,拼音数字间有一空格,但一行中最后一个拼音数字后没有空格。**
下面这个解法不够好,错误示范。switch语句太冗长,未直接使用原生指针。
#include <iostream>
#include <string>
int main()
{
std::string number;
std::cin >> number;
int sum = 0;
for(size_t i = 0 ; i < number.size() ; i++)
{
sum += (int)(number.at(i) - '0');
}
std::string allSum = std::to_string(sum);
std::string result;
for(size_t i = 0 ; i < allSum.size() ; i++)
{
switch(allSum[i])
{
case '1':
result.append("yi ");
break;
case '2':
result.append("er ");
break;
case '3':
result.append("san ");
break;
case '4':
result.append("si ");
break;
case '5':
result.append("wu ");
break;
case '6':
result.append("liu ");
break;
case '7':
result.append("qi ");
break;
case '8':
result.append("ba ");
break;
case '9':
result.append("jiu ");
break;
default:
break;
};
}
result[result.size() - 1] = '\0';
std::cout << result;
return 0;
}
下面代码主要是使用二维数组存储拼音数字,并且利用动态数组添加给定的一个正整数的每一位数字。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
char str[104] = {0};
char* p_str = str;
cin >> str;
int sum = 0;
while(*p_str != '\0')
{
sum += *p_str - '0';
p_str++;
}
vector<int>vec;
while(sum != 0)
{
vec.push_back(sum % 10);
sum /= 10;
}
char transform[104][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
for(size_t i = vec.size() - 1 ; i > 0 ; i--)
{
cout << transform[vec[i]] << " ";
}
cout << transform[vec[0]] << endl;
return 0;
}
通过上面这个题我们因该知道这些基础:
对于数字字符转化为整形数据类型的方法:
1.因为0到9的字符的ASCLL值为48到57,对于字符的运算是用ASCLL码来运算的,所以将数字字符转化为整形数字只需将某个数字字符减去'0'即可。
2.使用stringstream流比如说:
#include <iostream>
#include <sstream>
int main()
{
int x;
std::string str = "123和456你好";
std::stringstream stream;
stream << str;
stream >> x;
std::cout << x; //123
return 0;
}
对于常见的其他数据类型转化为字符串类型:
1.使用stringstream流
#include <iostream>
#include <sstream>
int main()
{
int x = 123456;
std::stringstream stream;
stream << x;
std::string str = stream.str();
std::cout << str;
return 0;
}
2.使用string类中的一系列重载的to_string方法
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned int val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
3.使用非标准的itoa函数。