在这篇文章以及之后这个系列的文章中,荔枝主要还是对自己在刷PAT题目的解题思路和代码做一个分享,也真诚希望有不同解法的小伙伴一起来交流学习一下哈哈哈~
文章目录
前言
在这篇文章中,荔枝主要分享自己刷PAT乙级的题目解答思路和答案哈哈哈,大家有更好的解法欢迎在评论区分享给荔枝,给荔枝学习进步的机会,谢谢小伙伴们啦~~~
PAT乙级1002——写出这个数
1. 题目要求
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
2. 输入输出样例
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
3. 荔枝的解题思路
其实这道题应该属于比较简单的问题,没考算法就是单纯的基础数据处理。荔枝首先将输入的字符转成int类型并用了一个向量容器来储存,当然了用数组也好哈哈。算出总得数后将各个数位的数字算出来,在利用一个chinese()的函数来将每个数位上的数字改为中文输出,最后把它们拼接在一起输出。在这里要注意题目对于输出的格式有要求,即两端都不要有空格,用if语句过滤处理一下就好了。
4. 荔枝的解题代码
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
//转中文
string chinese(int x){
string c="";
switch(x){
case 0:
c = "ling";
break;
case 1:
c = "yi";
break;
case 2:
c = "er";
break;
case 3:
c = "san";
break;
case 4:
c = "si";
break;
case 5:
c = "wu";
break;
case 6:
c = "liu";
break;
case 7:
c = "qi";
break;
case 8:
c = "ba";
break;
case 9:
c = "jiu";
break;
default:
c="";
}
return c;
}
int main(){
string n;
vector<int> s;
int result=0;
cin>>n;
for(int i=0;i<n.length();i++){
int m = n[i]-'0';
s.push_back(m);
}
for(int i=0;i<s.size();i++){
result+=s[i];
}
//数位上的权重
int qian = result/1000;
int bai = (result-1000*qian)/100;
int shi = (result-1000*qian-100*bai)/10;
int ge = (result-1000*qian-100*bai-10*shi);
//中文
string Q = chinese(qian);
string B = chinese(bai);
string S = chinese(shi);
string G = chinese(ge);
//输出格式要求
if(qian==0&&bai!=0){
cout<<B<<" "<<S<<" "<<G;
}else if(qian==0&&bai==0&&shi!=0){
cout<<S<<" "<<G;
}else if(qian==0&&bai==0&&shi==0&&ge!=0){
cout<<G;
}else{
cout<<Q<<" "<<B<<" "<<S<<" "<<G;
}
return 0;
}
总结
在这篇文章中荔枝仅是分享自己的做法和思路,可能会有些繁杂哈哈哈,希望有更好解法的小伙伴分享给荔枝嘻嘻嘻,一起学习进步嘛哈哈哈。
今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈。
谢谢大家的支持嘻嘻嘻~~~
比心心♥~~~