PAT 1002 写出这个数

PAT 1002 写出这个数

题目:

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789  

输出样例:

yi san wu

代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string input;
    string temp;
    int sum = 0;
    vector<string> output{"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    cin>>input;    
    for(int i = 0;i < (int)input.size();++i){
        temp = input.substr(i,1);//利用substr抓取input指定位置指定长度的内容
        int a = stoi(temp);//使用stoi将 字符串-->数字
        sum += a;
    }
   	
    vector<int> num;
    int digit = 0;
    while(sum != 0){
        num.push_back(sum%10);//从个位开始,添加到num中去
        sum /= 10;
        ++digit;
    }
    for(int i = digit - 1;i > 0;--i){
        cout<< output[num[i]] <<" ";//输出对应的字符
    }cout<<output[num[0]];//由于题目要求最后不能空格,输出最后做一个修改
    return 0;
}

解析:

将输入存为字符串,便于存取大数,同时按位进行操作求得各项之和.得出各位之值,查数组输出结果.

关于substr():

  1. 用途:一种构造string的方法
  2. 形式:s.substr(pos, n)
  3. 解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即 不加参数会默认拷贝整个s )
  4. 补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

关于stoi():

  1. 用途: 将指定开头的字符串修改为指定进制(2 10 16 auto) 的数字(默认为10进制)
  2. 形式:
int stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
  1. eg:
int i_dec = std::stoi (str_dec,&sz);
int i_hex = std::stoi (str_hex,nullptr,16);
int i_bin = std::stoi (str_bin,nullptr,2);
int i_auto = std::stoi (str_auto,nullptr,0);
//stoi(s)也可以,直接默认全部以 十进制 转换
原文地址:https://www.cnblogs.com/EPZ11/p/12269830.html