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函数。

上一篇下一篇

猜你喜欢

热点阅读