题目详情 - 拼写正确(3月20日) - 鸽子木 (gzmuoj.com)
题目描述
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N,整数N 可能会出现前导0,比如:00123,对应的整数是123。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
样例
输入数据 1
12345
Copy
输出数据 1
one five
Copy
数据范围
0≤N≤10^100
题目分析
输入一个数,计算每个数数位之和
开一个sum接收数位之和,可以有效去除前导0的影响
将每个数位有英文字母表示,通过调用字符串数组中的数来输出英文答案
因为数据范围是10的100次方,
开个动态数组存数位之和的数组
关于vector<>a
向量
输入a.push_back()
输出a.pop_back()
begin(),end()
排序sort(begin(),end())
倒置reverse(a.begin(),a.end())
复copy(a.begin(),a.end(),b.begin()+1)从begin+1开始复制
find(a.begin(),a.end(),10)begin到end区间找10返回位置
#include<bits/stdc++.h>
using namespace std;
long long sum;
vector <int> ans;
string nums[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
//所有情况
int main(){
string a;
cin>>a;//输入字符串
for(int i=0;i<a.size();i++){
sum+=(a[i]-'0')%10 ;//sum,数位之和
a[i]=(a[i]-'0')/10;
}
cout<<sum<<endl;
int i=0;
while(sum){
cout<<i<<"d";
ans.push_back(sum%10);//将sum数位之和,存入ans数组中
sum/=10;
cout<<ans[i]<<" "<<"a"<<endl;
i++; }
for(int j=i-1;j>=0;j--){
cout<<nums[ans[j]]<<" ";
}
return 0;
}