1002. 写出这个数 (20) PAT

来源:互联网 发布:vc 6.0 安装包 知乎 编辑:程序博客网 时间:2024/05/29 14:36

1002. 写出这个数 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

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

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu

#include <cstdio>#include <string>#include <iostream>using namespace std;string number[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};struct num{int digit[1000];int size;void init(){size=0;for(int i=0;i<1000;i++){digit[i]=0;}}void add(int x){if(size==0){digit[size]=x;size++;return;}digit[0]+=x;int temp=0;for(int i=0;i<size;i++){digit[i]=digit[i]+temp;if(digit[i]<1000){                temp=0;}if(digit[i]>=1000){temp=digit[i]/1000;//printf("temp:%d digit[i]:%d\n",temp,digit[i]);digit[i]=digit[i]%1000;//printf("i:%d ---digit[i]:%d\n",i,digit[i]);}}if(temp!=0){digit[size++]=temp;}}void print(){    printf("size:%d\n",size);for(int i=size-1;i>=0;i--){printf("%d",digit[i]);}printf("\n");}    void printhzi(){        int first=0;        for(int i=size-1;i>=0;i--){                int temp;            if(digit[i]>=100){                int tag1=100;                for(int j=0;j<3;j++){                    temp=digit[i]/tag1;                    digit[i]=digit[i]%tag1;                    tag1=tag1/10;                    if(first==0){                        cout<<number[temp];                        first=1;                    }else{                        cout<<" "<<number[temp];                    }                }            }else if(digit[i]>=10){                int tag2=10;                for(int j=0;j<2;j++){                    temp=digit[i]/tag2;                    digit[i]=digit[i]%tag2;                    tag2=tag2/10;                    if(first==0){                        cout<<number[temp];                        first=1;                    }else{                        cout<<" "<<number[temp];                    }                }            }else{                temp=digit[i];                if(first==0){                    cout<<number[temp];                    first=1;                }else{                    cout<<" "<<number[temp];                }            }        }    }};struct num inum;int main(){char n;inum.init();while(scanf("%c",&n)&&n!='\n'){inum.add(n-'0');}//inum.print();inum.printhzi();return 0;}



0 0