• 1002 写出这个数【PAT (Basic Level) Practice (中文)】


    1002 写出这个数【PAT (Basic Level) Practice (中文)】

    原题链接1002 写出这个数 (pintia.cn)

    1.前言

    • 分数:20

    • 难度:⭐️⭐️⚝⚝⚝

    • 知识点:

      • C程序设计/数组/字符串
      • C程序设计/分支控制/switch
    • 方法技巧:

      • 取得整数中的每一位数字:整数对10取余获得个位数字,然后整数除以10去掉个位数字,循环取得每一位数字。
    • 运行限制

      代码长度限制16 KB
      时间限制400 ms
      内存限制64 MB

    2.题目描述

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

    输入格式:

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

    输出格式:

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

    输入样例:

    1234567890987654321123456789
    
    • 1

    输出样例:

    yi san wu
    
    • 1

    3.解题思路

    3.1题目分析

    输入的整数值远远超过int的取值范围,应采用字符或字符串来处理输入的数字。

    输入样例输入的整数 n n n 为1234567890987654321123456789。

    各位数字求和1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 135

    接下来,要用汉语拼音写出和的每一位数字。根据拼音的对应关系,0到9的拼音分别为ling, yi, er, san, si, wu, liu, qi, ba, jiu。

    所以,135对应的拼音为输出样例中的yi san wu。

    3.2基本思路

    1. 获取输入n中的每一位数字,再计算每一位数字之和sum
    2. 取得sum的每一位数字,输出其对应的汉语拼音。

    3.3详解步骤

    1. 循环读取n的每一位数字字符c,转换为对应的数字c-'0',同时累加求各位数字之和sum,也可以直接输入字符串n,再计算各个数字之和;
    2. 定义一个函数printChinesePinyin,用switch-case将数字转换为对应的汉语拼音;
    3. 将求和后的每位数字提取出来:整数对10取余获得个位数字,然后整数除以10去掉个位数字,循环取得整数的每一位数字;
    4. 调用上述函数,输出每位数字的汉语拼音。

    3.4注意点

    一行中最后一个拼音数字后没有空格,否则会格式错误。

    4.参考答案

    #include 
    //输出数字对应的汉语拼音
    void printChinesePinyin(int digit) {
    	switch(digit) {
    		case 0:printf("ling");break;
    		case 1:printf("yi");break;
    		case 2:printf("er");break;
    		case 3:printf("san");break;
    		case 4:printf("si");break;
    		case 5:printf("wu");break;
    		case 6:printf("liu");break;
    		case 7:printf("qi");break;
    		case 8:printf("ba");break;
    		case 9:printf("jiu");break;
    	}
    }
    //输出求和后的sum的每位数字
    void output(int sum){
    	int i=0,flag=0;//flag标记是否输出空格
    	int digit[3];//记录求和后的每位数字
    	//从低位到高位取得sum的每一位数字记录在digit
    	while (sum) {
    		digit[i++] = sum % 10 ;
    		sum /= 10;
    	}
    	//输出数字
    	while(i>0){
    		if (flag) printf(" ");
    		else flag = 1;
    		printChinesePinyin(digit[--i]);
    	}
    }
    
    int main() {
    	int sum=0;
    	char c;
        //循环读取n的每一位数字字符c,同时累加求各位数字之和sum,也可以读入字符串n,再计算各个数字之和
    	while((c=getchar())!='\n')
    		sum+=c-'0';
    	output(sum);//输出求和后的sum的每位数字
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    2022最新版-李宏毅机器学习深度学习课程-P49 GPT的野望
    数据智慧:C#中编程实现自定义计算的Excel数据透视表
    智慧园区规划建设解决方案PPT(40页)
    【C++】STL——stack和queue(万字详解)
    【JAVAEE框架】Mybatis项目起步讲解
    使用Jenkins实现前端自动化打包部署(Linux版本)
    【Python】Flask蓝图(bluePrint)
    Flutter的配置
    玉米脱粒机设计全套
    远程文件包含演示
  • 原文地址:https://blog.csdn.net/weixin_40171190/article/details/127699189