美文网首页
1002写出这个数

1002写出这个数

作者: advanced_slowly | 来源:发表于2019-08-20 10:38 被阅读0次

    读入一个正整数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函数。

    相关文章

      网友评论

          本文标题:1002写出这个数

          本文链接:https://www.haomeiwen.com/subject/wkcusctx.html