PAT A.1082. Read Number in Chinese (25)

来源:互联网 发布:道亨软件使用说明 编辑:程序博客网 时间:2024/05/28 15:07


1082. Read Number in Chinese (25)

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

Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output "Fu" first if it is negative. For example, -123456789 is read as "Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu". Note: zero ("ling") must be handled correctly according to the Chinese tradition. For example, 100800 is "yi Shi Wan ling ba Bai".

Input Specification:

Each input file contains one test case, which gives an integer with no more than 9 digits.

Output Specification:

For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.

Sample Input 1:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:

yi Shi Wan ling ba Bai

#include <stdio.h>#include <math.h>#include <malloc.h>#include <string.h>

char *num[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};char *danw[4] = {"", "Shi", "Bai", "Qian"};

int flag_f = 0, flag_i = 0;int flag = 0;

void read(char a[]){ int alen; alen = strlen(a); for(int i = 0; i < alen; i++){  if(a[i] ==  '0'){   flag_i = 1;  }else{   if(flag_i == 1 && flag_f == 1){    printf(" ling");    flag_i = 0;   }   flag_f = 1;   if(flag == 1){    printf(" %s", num[a[i] - '0']);   }else{    printf("%s", num[a[i] - '0']);    flag = 1;   }   if(i != alen - 1){    printf(" %s", danw[alen - 1 - i]);   }   if(i == alen - 1) flag_i = 0;  } }}

int main(){ char in[11]; scanf("%c", in); if(in[0] == '-'){  printf("Fu");  scanf("%s", in);  flag = 1; }else{  scanf("%s", &in[1]); } int in_d; sscanf(in, "%d", &in_d); if(in_d == 0){  printf("ling\n");  return 0; }else{  if(in_d >= 100000000){   if(flag == 1){    printf(" %s Yi", num[in_d / 100000000]);   }else{    printf("%s Yi", num[in_d / 100000000]);    flag = 1;   }   flag_f = 1;   in_d %= 100000000;   int in_d1 = in_d / 10000, in_d2 = in_d % 10000;   char d1[5], d2[5];   if(in_d1 != 0){    sprintf(d1, "%04d", in_d1);    read(d1);    printf(" Wan");   }   if(in_d2 != 0){    sprintf(d2, "%04d", in_d2);    read(d2);   }  }else if(in_d >= 10000){   int in_d1 = in_d / 10000, in_d2 = in_d % 10000;   char d1[5], d2[5];   if(in_d1 != 0){    sprintf(d1, "%d", in_d1);    read(d1);    printf(" Wan");   }   if(in_d2 != 0){    sprintf(d2, "%04d", in_d2);    read(d2);   }  }else{   int in_d2 = in_d % 10000;   char d2[5];   sprintf(d2, "%d", in_d2);   read(d2);  } } printf("\n"); return 0;

}   

0 0
原创粉丝点击