PTA | 1002 写出这个数
这道题实际考察我们拆位和映射。
相加求和 首先我们需要把输入的数字每一位都进行相加,这里我们可以利用一个sum,每输入一位就加到sum上。我们可以用string获取输入的个数,然后再转化为数字,遍历所有数字进行相加即可。
拆和
然后把总和拆成每一位,比如135,拆完之后,number里存的就是[5,3,1](因为取模是取的后面的数)
映射输出
所以输出的时候应该从最高位开始输出,即先输出1,再输出3,最后输出5。
我们手动建立映射
第一次直接输出1对应的映射关系,第二次输出之前判断当前位置是否是起始位置(最高位),如果不是就空一个空格,继续输出。
#include<iostream>
#include<string>
using namespace std;
int sum ,number[3],j;
int main()
{
//统计输入的数字各位之和
string x;cin>>x;
for (int i = 0;i < x.size();i++)
sum += x[i] - '0';
//总和拆位
while(sum>0)
{
number[j]=sum%10;
sum/=10;
j++;
}
for (int i = j - 1;i >= 0;i--)
{
if (i != j - 1) cout << ' ';//如果不是最高位就都打印一个空格
switch (number[i]) {
case 0:cout << "ling";break;
case 1:cout << "yi";break;
case 2:cout << "er";break;
case 3:cout << "san";break;
case 4:cout << "si";break;
case 5:cout << "wu";break;
case 6:cout << "liu";break;
case 7:cout << "qi";break;
case 8:cout << "ba";break;
case 9:cout << "jiu";break;
}
}
return 0;
}
二刷
#include<bits/stdc++.h>
using namespace std;
int sum;
vector<string>ans;
string haxi[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
string s;cin>>s;
for(int i=0;i<s.size();i++)
{
sum+=s[i]-'0';
}
while(sum){
ans.push_back(haxi[sum%10]);
sum/=10;
}
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++)
{
if(i)cout<<" ";
cout<<ans[i];
}
return 0;
}