zoukankan      html  css  js  c++  java
  • [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.输出时,对最后一个数字拼音字符串的多余空格,可以用比较巧妙的办法解决:字符串数组的该位置为'';
            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 != '
    '){
                number_str[position++] = tmp;
            } else
                break;
        }
        print(calculate(number_str, position));
        str[strlen(str) - 1] = '';//经典:删除末尾空格
        printf("%s", str);
    }
    

      

  • 相关阅读:
    tryparse的用法,^0*[1-9]d*$
    寻找指定的进程然后杀死的代码写法
    P2421 [NOI2002]荒岛野人
    P2568 GCD
    P1445 [Violet]樱花
    P3119 [USACO15JAN]草鉴定Grass Cownoisseur
    P1314 聪明的质监员
    P3811 【模板】乘法逆元
    P3943 星空
    P3225 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/8784595.html
Copyright © 2011-2022 走看看