1002. 写出这个数 (20)——stack

来源:互联网 发布:武林外传 知乎精华 编辑:程序博客网 时间:2024/06/07 17:16

1、题目描述

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100

输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:
1234567890987654321123456789
输出样例:
yi san wu
2、思路分析
此处输入n可能是一个超大整数,需要借助字符串对其进行存储和计算处理。用字符串n[101]读取输入,并计算各位总和ans,由于ans不会很大,可以用一个int变量表示,此后对ans循环取余及除以10,并将所得余数序列存入堆栈,直到商为0停止。依次出栈,读取并显示,显示时用到了一个refer[10][5]的char二维印射数组。
3、C++代码
#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<vector>#include<string>#include<stack>#include<queue>#include<math.h>#include<map>using namespace std;int Ans;char N[101];char Refer[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};void Input(){scanf("%s",N);}void Process(){Ans=0;for(int i=0;N[i]!='\0';i++)Ans+=N[i]-'0';}void Display(){if(Ans==0)printf("ling\n");else{stack<int> S;while(Ans>0){S.push(Ans%10);Ans/=10;}printf("%s",Refer[S.top()]);S.pop();while(!S.empty()){printf(" %s",Refer[S.top()]);S.pop();}printf("\n");}}int main(){//while(true){Input();Process();Display();//}return 0;}

0 0
原创粉丝点击