[C++]PAT乙级1002.写出这个数(20/20)

/*
1002. 写出这个数 (20)

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

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

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu
*/
/*
    思路:
        1.字符串存储长达100位的"数字",解决空间放不下问题;
        2.对各位数字累加求和,注意char转int,ASCII表中48:'0';65:'A';97:'a'
        3.输出时,对最后一个数字拼音字符串的多余空格,可以用比较巧妙的办法解决:字符串数组的该位置为'\0';
        4.运用好头文件<string.h>中常用的【字符串数组】的处理函数:
            strcpy(字符串数组1,字符串数组2);
            strncpy(字符串数组1,字符串数组2, len);

            strcmp(字符串数组1,字符串数组2);//0:相等;1:字符串数组1>字符串数组2;-1:字符串数组1<字符串数组2;
            strncmp(字符串数组1,字符串2, len);

            strcat((字符串数组1,字符串2));

            strupr(字符串数组数组);//转大写
            strlwr(字符串数组);//转小写

            strlen(字符串数组);//求字符串长度
*/
#include <iostream>
#include <string.h>
using namespace std;

const int MAX_LENGTH = 100;
char str[1000];

int calculate(char chs[], int len){
    int num = 0;
    for(int i=0;i<len;i++){
        num += ((int)chs[i]) - 48;
    }
    return num;
}

void print(int x){
    static int tmp;
    static char pinyin[1000];
    for(;x != 0;){
        tmp = x%10;
        x /= 10;
        switch(tmp){
            case 1: strcpy(pinyin, "yi ");break;
            case 2: strcpy(pinyin, "er ");break;
            case 3: strcpy(pinyin, "san ");break;
            case 4: strcpy(pinyin, "si ");break;
            case 5: strcpy(pinyin, "wu ");break;
            case 6: strcpy(pinyin, "liu ");break;
            case 7: strcpy(pinyin, "qi ");break;
            case 8: strcpy(pinyin, "ba ");break;
            case 9: strcpy(pinyin, "jiu ");break;
            case 0: strcpy(pinyin, "ling ");break;
        }
        strcat(pinyin, str);
        strcpy(str, pinyin);
    }
}

int main(){
    char number_str[MAX_LENGTH];
    int position;
    char tmp;
    for(position=0;position<MAX_LENGTH;){
        scanf("%c", &tmp);
        if(tmp != '\n'){
            number_str[position++] = tmp;
        } else
            break;
    }
    print(calculate(number_str, position));
    str[strlen(str) - 1] = '\0';//经典:删除末尾空格
    printf("%s", str);
}

  

posted @ 2018-04-10 23:31  千千寰宇  阅读(412)  评论(0编辑  收藏  举报