P1002 写出这个数(Basic Level)
转跳点:
作为第二题,拿字符串刚刚好。不过这道题我卡了一下,还是太弱了。看题
题目意思很明确,就是想让你把输入的每一位数字加起来,再输出各个位的拼音。这道题一看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)的更多相关文章
- [PTA] 1002. 写出这个数 (Basic)
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Sc ...
- PTA(Basic Level)-1002 写出这个数
一 1002 写出这个数 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1010 ...
- PAT乙级 1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- PAT-乙级-1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- [C++]PAT乙级1002.写出这个数(20/20)
/* 1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100. ...
- PAT 1002 写出这个数 (20)(代码)
1002 写出这个数 (20)(20 分) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100 ...
- 【PAT】1002. 写出这个数 (20)
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
- PAT1002 写出这个数 (C++实现)
PAT乙级考试题目 1002 写出这个数 (20 分) 题目要求: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 ...
- 【算法笔记】B1002 写出这个数
1002 写出这个数 (20 分)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 101 ...
随机推荐
- JS事件委托或者事件代理原理以及实现
事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...
- 1 (msql实战) 基础架构
mysql> select * from T where ID=10: 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程. 所以今天我想和你一起把 MyS ...
- Py西游攻关之基础数据类型(二)-列表
Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 五 List(列表) OK,现在我们知 ...
- 单例设计模式和main方法
设计模式就是在大量的实践中总结和理论之后优选的代码结构.编程风格.以及解决问题的思考方式. 说白了设计模式就是在实际编程中逐渐总结出的解决问题的套路,类似于数学公式. 类的单例设计模式:在开发过程中有 ...
- 141、Java内部类之实例化外部类对象
01. 代码如下: package TIANPAN; class Outer { // 外部类 private static String msg = "Hello World !" ...
- A Simple Problem with Integers-POJ3468 区间修改+区间查询
题意: 给你n个数和2个操作,C操作是将一个区间内的每个数都加上k,Q操作是询问一个区间的和 链接:http://poj.org/problem?id=3468 思路: 线段树区间修改+区间查询 代码 ...
- ASC码速记
ASCII表规则记忆 我们仅仅要记住了一个字母或数字的 ASCII 码 (比如记住 A 为 65 , 0 的 ASCII 码为 48 ), 知道对应的大写和小写字母之间差 32. 0 -- 32 按键 ...
- RedHat OpenShift QuickStart 1.1 OpenShift基础
openshift 提供了命令行工具和web可视化页面,这些工具通过REST API去和openshift交互 一.开始为开发人员使用OpenShift 1. 探索命令行 2. 探索web conso ...
- 产品降价、AR技术、功能降级,库克和苹果还有哪些底牌可以打?
经过十年的高速发展,苹果和iPhone迎来了拐点,他们去年的境况,也连累了一大批的供应商,但如今的苹果财务健康,产业链稳固,在面对经济寒冬和激烈竞争的时候,有很多牌可以打,而且常常会在关键时刻打出来, ...
- Linux centosVMware 命令 lvm、磁盘故障小案例
一.lvm命令 LVM:逻辑分区管理,可基于动态的扩展缩小硬件设备的使用空间,注意:lvm磁盘复杂,由于使用lvm,数据丢失恢复起来有一定风险.概念:pv.VG.lvpv(物理卷,有pp基本单位构成) ...