转跳点:

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

  题目意思很明确,就是想让你把输入的每一位数字加起来,再输出各个位的拼音。这道题一看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. hdfs dfs ls /列出了本地根目录下文件夹和文件Warning: fs.defaultFS is not set when running "ls" command

    [root@node01 customShells]# hdfs dfs -ls /Warning: fs.defaultFS is not set when running "ls&quo ...

  2. [Android实例] Android网络收音机项目(内含源码)

    ======================帖子内容===================================最近喜欢听广播,但是搜索了一下,苦于网上没有Android的网络收音机项目的例 ...

  3. pip3与pyttsx3文字语音转换

    今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字, 打算通过pip3 install pyttsx安装包,结果报错, 然后试了一下发现不行,去网上查了一下发现p ...

  4. ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。

    下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...

  5. 图形数据写入数据库,Filletream

    图形数据写入数据库 用FileStream对象读模式打开图形文件 Dim 文件对象 As New FileStream(图形文件名, FileMode.Open, FileAccess.Read) 定 ...

  6. UISearchBar设置背景色

    1.关于UISearchBar的背景颜色,竟然要如下设置才正常: [documentSearchView setBackgroundImage:[UIImage new]]; documentSear ...

  7. 获取进程对应的UID登陆用户

    getlogin获取登陆用户,守护进程调用出错 一个用户UID可以对应多个登陆名吗?貌似可以

  8. LeetCode206. Reverse Linked List(反转链表)

    题目链接:https://leetcode.com/problems/reverse-linked-list/ 方法一:迭代反转 https://blog.csdn.net/qq_17550379/a ...

  9. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  10. Percona-Toolkit 之 pt-kill 用法

    生产环境中我们时常遇到这样的情况,数据库性能恶劣,需要马上杀掉部分会话,不然数据库就夯死.我们可以先找show processlist的输出来杀会话,但是比较麻烦.pt-kill为我们解决了杀会话问题 ...