当前位置: 代码迷 >> 综合 >> 1002. 写出这个数 (20) PAT
  详细解决方案

1002. 写出这个数 (20) PAT

热度:49   发布时间:2023-09-24 06:19:54.0

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;
}