PAT乙级_1002 写出这个数
Posted 白藏i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级_1002 写出这个数相关的知识,希望对你有一定的参考价值。
题目(20分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
结尾无空行
输出样例:
yi san wu
结尾无空行
提交
19分
#include <bits/stdc++.h> using namespace std; int Plus(string n) { int num = 0; int len = n.length(); for (int i = 0; i < len; i++) { char temp = n[i]; num += temp - \'0\'; //隐式转换,char类型变int类型,从ASCII码表可以看出减去字符0对应的‘48’就是十进制 } return num; } int reverse(int x) { int _x = 0; while (x != 0) { _x = _x * 10 + x % 10; x /= 10; } return _x; } void Word(int m) { while (1){ int temp = m % 10; switch(temp) { case 0: cout << "lin"; 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; } m /= 10; if (m != 0) cout << " "; else return; } } int main () { string n; cin >> n; //输入字符串 int r = Plus(n); //计算数字的和 int r1 = reverse(r); //翻转和 Word(r1);//取余的模式输出拼音 }
思路:超出了long long,所以以字符串的形式cin,再统计数的和;用取余的方式输出拼音,所以先反转一下和。
这里有个误区,如果和是0结尾,反转和的时候0就不存在了(比如300→3)
就少了一分
解决(20分):
都用数组存放,0就不会消失了。
#include <bits/stdc++.h> using namespace std; int main() { char x[10000]; //字符数组 最后一个是 \'\\0\' int s[10000]; //字符数组转换成int 数组 int y[10000]; //反转和 数组 int g = 0; //统计 反转和 数组的长度 int sum = 0;//统计和 cin >> x; //统计字符串的和 遇到\\0就停止累加 for (int i = 0; x[i] != \'\\0\'; i++) { s[i] = x[i] - \'0\'; sum += s[i]; } if (sum == 0) cout << "ling"; else //反转和,放进数组内 { while (sum != 0) { int k; k = sum % 10; y[g++] = k; sum = sum / 10; } } //从数组最后往前输出 解决最后一个拼音不带空格的问题 for (int i = g - 1; i >= 0; i--) { switch (y[i]) { case 0:if (i != 0)cout << "ling" << " "; else cout << "ling"; break; case 1:if (i != 0)cout << "yi" << " "; else cout << "yi"; break; case 2:if (i != 0)cout << "er" << " "; else cout << "er"; break; case 3:if (i != 0)cout << "san" << " "; else cout << "san"; break; case 4:if (i != 0)cout << "si" << " "; else cout << "si"; break; case 5:if (i != 0)cout << "wu" << " "; else cout << "wu"; break; case 6:if (i != 0)cout << "liu" << " "; else cout << "liu"; break; case 7:if (i != 0) cout << "qi" << " "; else cout << "qi"; break; case 8:if (i != 0)cout << "ba" << " "; else cout << "ba"; break; case 9:if (i != 0)cout << "jiu" << " "; else cout << "jiu"; break; } } return 0; }
以上是关于PAT乙级_1002 写出这个数的主要内容,如果未能解决你的问题,请参考以下文章