转跳点:

  作为第二题,拿字符串刚刚好。不过这道题我卡了一下,还是太弱了。看题

  题目意思很明确,就是想让你把输入的每一位数字加起来,再输出各个位的拼音。这道题一看int型就存不下long long也别想 10100 就别想那么多了,肯定是字符数组。唉不过丢连丢到家了我去算了一下 10100 是多少后直接断言说数组装不下。当时脑子一抽就觉得 10100 就该有 10100 位,丢脸啊。这玩意数组最大开个110就行了,真的是瞎了。这道题第一个难点讲完了,至于求和,很简单,让str[i]-'0'即可得到整数,外面套个循环就求出来了。另外一个难点就是求每一位的循环的停止条件应该是

if (0 != sum / 10 || 0 != sum % 10) //缺一不可

  || 后面是用来预防相加之后只有一位数, 前面是用来预防sum是10 的倍数。

2020-02-15 10:22:21更新:回来看才发现我当初停止条件好蠢,其实每一次都对sum/10,所以最后sum一定会等于0,所以,停止条件应该如此

if (!sum) 或者 if (sum > 0)

最后说说输出,反正我是switch case,也可以用 if……else……,随意。目前我是想不到更好的办法了。现在我想出来了所以划掉(其实当时是我懒不想写那种方法)可以用字符串呦,将各个位取出存入字符串种再在将数组套另一个字符串数组中做索引,就像这样:

                 num[str[i]-'0'];//num是“ling”,“yi”……的字符串数组

最后当然是愉快的贴上 AC 代码啦(上一次的,全新版本在下面)

 1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char str[110];
7 while (~scanf("%s", str))
8 {
9 int sum = 0;
10 for (int i = 0; str[i] != '\0'; i++)
11 {
12 sum += str[i] - '0';
13 }
14 int i = 0;
15 while (0 != sum % 10 || 0 != sum / 10)
16 {
17 str[i] = sum % 10 + '0';
18 i++;
19 sum /= 10;
20 }
21 str[i] = '\0';
22 int len = strlen(str);
23 for (i = len - 1; i >= 0; i--)
24 {
25 switch (str[i] - '0')
26 {
27 case 0:
28 printf("ling");
29 break;
30 case 1:
31 printf("yi");
32 break;
33 case 2:
34 printf("er");
35 break;
36 case 3:
37 printf("san");
38 break;
39 case 4:
40 printf("si");
41 break;
42 case 5:
43 printf("wu");
44 break;
45 case 6:
46 printf("liu");
47 break;
48 case 7:
49 printf("qi");
50 break;
51 case 8:
52 printf("ba");
53 break;
54 case 9:
55 printf("jiu");
56 break;
57 }
58 if (i != 0)
59 {
60 printf(" ");
61 }
62 }
63 putchar('\n');
64 getchar();
65 }
66 return 0;
67 }

旧版

  哦,最后差点忘了,因为评测机可能是多组输入所以记得用getchar()吞回车哦!

2020-01-06

  为了那位机智而又迷人的小姐姐,我来更新一下博客,下面的代码,是新的解法,其实就是换成了字符串而已,压缩了一下代码

 1 #include <stdio.h>
2 #include <string.h>
3
4 //数字的字符数组
5 const char num[10][6] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
6
7 int main()
8 {
9
10 char str[110];
11 scanf("%s", str);
12
13 //求和
14 int sum = 0;
15 for (int i = 0; str[i] != '\0'; i++)
16 {
17 sum += str[i] - '0';
18 }
19
20 //取各个位数上的数
21 int i = 0;
22 while (sum != 0)
23 {
24 str[i++] = sum % 10 + '0';
25 sum /= 10;
26 }
27 str[i] = '\0';//隔断字符串
28
29 //输出
30 int len = strlen(str);
31 for (i = len - 1; i >= 0; i--)
32 {
33 i == 0 ? printf("%s\n", num[str[i] - '0']) : printf("%s ", num[str[i] - '0']);
34 }
35 return 0;
36 }

这是一个全新的版本

  所以,要加油呦,小姐姐!

算法不易,诸君共勉

P1002 写出这个数(Basic Level)的更多相关文章

  1. [PTA] 1002. 写出这个数 (Basic)

    import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Sc ...

  2. PTA(Basic Level)-1002 写出这个数

    一 1002 写出这个数  读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10​10 ...

  3. PAT乙级 1002. 写出这个数 (20)

    1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...

  4. PAT-乙级-1002. 写出这个数 (20)

    1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...

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

    /* 1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100. ...

  6. PAT 1002 写出这个数 (20)(代码)

    1002 写出这个数 (20)(20 分) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100 ...

  7. 【PAT】1002. 写出这个数 (20)

    1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...

  8. PAT1002 写出这个数 (C++实现)

    PAT乙级考试题目 1002 写出这个数 (20 分) 题目要求: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数  ...

  9. 【算法笔记】B1002 写出这个数

    1002 写出这个数 (20 分)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 101 ...

随机推荐

  1. [NOI 2005]瑰丽华尔兹

    Description 题库链接 给你一张 \(n\times m\) 的棋盘,棋盘上有一些障碍.一共 \(t\) 个时刻,被分为 \(k\) 段,在每一段中都有一个向上/下/左/右倾斜的趋势(持续时 ...

  2. ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。,进不了Debug,访问不到方法

    开发项目的时候运行报错,Debug进不去方法,猜想是js中ajax的url 路径的问题,后来找公司的斌哥解决了问题,感谢! 异常: 解决过程: 清理缓存,修改js代码,通过浏览器的F12查看,发现修改 ...

  3. XML规范化(DTD)

    无意义的XML 之前说过因为xml没有预设的标签,所以说你怎麽写他一般都不会报错. 所以需要对xml的书写格式进行一些限制,这就引入了DTD 下面的这个xml你可以给book添加各种属性还不会报错,但 ...

  4. MySQL 之基础操作及增删改查等

    一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...

  5. 135、Java中的静态块,构造方法和构造块

    01.代码如下: package TIANPAN; class Book { static String msg; // static属性,暂不封装 public Book() { // 构造方法 S ...

  6. Java 5 、6、 7中新特性

    JDK5新特性(与1.4相比)[转] 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1. ...

  7. python用户界面编程和文件转换为exe文件

    python用户界面编程学习代码如下所示: #python用户图形界面编程实现import sys #简单用户图形界面实现from PyQt5.QtWidgets import QApplicatio ...

  8. docker-构建建tomcat镜像并启动容器

    1.下载一个tomcat8,解压好改名为tomcat并配置端口为80,删除webapps下的默认的应用,修改tomcat/bin目录下脚本的权限,chmod +x *.sh 2.路径一般放在/usr/ ...

  9. div 浮动

    浮动 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <titl ...

  10. day11-Python运维开发基础(迭代器与可迭代对象、高阶函数)

    1. 迭代器与可迭代对象 # ### 迭代器 """ 迭代器: 能被next方法调用,并且不断返回下一个值的对象,是迭代器(对象) 特征:迭代器会生成惰性序列,它通过计算 ...