Day 006:PAT练习--1005 Spell It Right (20 分)

上星期一直在写报告乱七八糟的,从今天开始不刷乙级的了,还是多刷甲级进步来得快一点!

题意(放大更清晰)

显而易见,该题的关键在于将输入之和的每一位从高到低输出,这里我们发现题意中的输入数的范围为0-10^100,显然我们可以使用字符串输入,之后分别遍历每一位,将其分别存入sum中。

因为是从高到低输出每一位,而不是从低到高:若是后者,则可以使用一个小函数不断取余再除以10即可全部输出;此时是前者,则可使用sstream头文件,将sum转换为字符串形式,再分别遍历每一位,输出每一位的值对应的字符数组分量,即可AC。
这里我们要注意,要不就使用字符串数组存储数字转换出的英文单词;否则若使用普通的字符数组的话,要在变量名前加※,以表示其为一个分量不限长度的字符数组,输出时也要以字符串形式输出

代码如下:

#include<iostream>
#include<string>
#include<sstream>
#include<cstring>
#include<algorithm>
using namespace std;
char *num[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
void ans(string s){
    for(int i = 0; i < s.length(); i++){
        printf("%s", *(num + int(s[i] - 48)));
        if(i != s.length() - 1){
            printf(" ");
        }
    }
}
int main(){
    string s;
    getline(cin, s);
    int len = s.length(), sum = 0;
    for(int i = 0; i < len; i++){
        sum += (s[i] - 48);
    }
    stringstream ss;
    string temp;
    ss << sum;
    ss >> temp;
    ans(temp);
    return 0;
}

继续加油!争取能拿90+!

posted @ 2021-06-01 16:31  北海钟士季  阅读(57)  评论(0)    收藏  举报