PAT乙级刷题/1002 写出这个数/C++实现

一、题目描述

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

 输出样例:

yi san wu

二、思路分析

这题我认为比较考察字符串的一些东西,整个思路不是很难,把输入的一行数字累加起来,得到他们的和,最后用汉语拼音的方式写出来

三、代码以及提交截图

#include <iostream>
#include <string>

using namespace std;

int main()
{

    string s; //将该数字以字符串的形式输入
    cin >> s;
    int sum = 0;
    for(int i = 0; i < s.length(); i++)
    {
        sum = sum + (s[i] - '0');//通过i - '0'将每位字符型数字转换为整型数字,再计算累加和
    }
    string str[10] =  {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    string num = to_string(sum);//to_string将数字常量转换为字符串
    for(int i = 0;i < num.length();i++)
    {
        if(i != 0)
        {
            cout << " ";
        }
        cout << str[num[i] - '0'];//很巧妙
    }
    return 0;
}

PAT乙级刷题/1002 写出这个数/C++实现

四、一些总结

1.to_string用法

具体可以看下这篇文章

std::to_string - cppreference.com

示例代码:

// CPP program to illustrate
// std::to_string
#include <bits/stdc++.h>
  
// Driver code
int main()
{
  
    // Converting float to string
    std::string str1 = std::to_string(12.10);
  
    // Converting integer to string
    std::string str2 = std::to_string(9999);
  
    // Printing the strings
    std::cout << str1 << '\n';
    std::cout << str2 << '\n';
    return 0;
}

输出结果:

12.100000
9999

2.s[i] - '0' 和 num[i] - '0'

注意到- '0',为什么要这样操作呢,显然结合题解代码,要把字符型数字转化为整型数字

举个例子,'9'=57 因为数字的ascii码是连续的所以'9'-'0'=57-48=9;

个人认为可以当作一个小技巧来记忆和使用

附上ASCII表

PAT乙级刷题/1002 写出这个数/C++实现

 

上一篇:链栈的C语言实现


下一篇:Linux expect 介绍和用例