题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384
题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
解题思路:
1、将输入的数字看作是字符串,用户每从控制台输入一位就进行累加,得到各位和num。
2、讲 0-9中文拼英保存在数组中、
3、num为0时输出中文ling,否则通过栈保存num从个位到最高位的所有数字
注意:之所以运用栈是因为num%10时只能取到num最低位数字,而题目要求从最高位开始输出,因此运用到栈的FILO的性质。
解题代码:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
char chinese[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
stack<int> st;
int main()
{
char ch;
ch = getchar();
int num =0;
while(ch!='\n'){
num += ch-'0';
ch = getchar();
}
if(num==0){
printf("%s",chinese[0]);
return 0;
}
while(num>0){
st.push(num%10);
num/=10;
}
int len =0;
while(!st.empty()){
if(len!=0) cout<<" ";
printf("%s",chinese[st.top()]);
st.pop();
len++;
}
return 0;
}