乐趣区

关于算法-数据结构:PAT甲级1005-Spell-It-Right

题目要求:

给定一个非负整数,将其每一位进行相加,而后对后果的每一位从左往右输入其对应的英文数字

算法思路:

因为整数大小最大为 10^100,得用 string 存储才行, 对 string 中的每一位减去 ’0’ 后进行求和,而后再转化为 string, 从左往右顺次输入对应每一位的英文字母, 为了不便对最终后果的每一位进行输入建设从数字到英文单词的映射 numToWords,下标示意每一位数字,其值代表对应的英文单词。

提交后果:

AC 代码:
#include<cstdio>
#include<string>
#include<iostream>

using namespace std;

string numToWords[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

int main(){
    string a;
    cin>>a;
    // 对每一位进行求和
    int sum = 0;
    for(int i=0;i<a.length();++i){sum += (a[i]-'0');
    }
    // 而后将 sum 转化为 string 不便对每一位进行操作
    string s = to_string(sum);
    for(int i=0;i<s.length();++i){cout<<numToWords[s[i]-'0'];
        if(i<s.length()-1) cout<<" ";
    } 
    return 0 ;
}
退出移动版