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 ...
随机推荐
- uniGUI之uniColorButton(21)
uniColorButton相当于VCL的ColorDialog1 若Palette 为空,则为系统自带颜色.
- window查看连接过的无线密码
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | find ...
- MyBatis模糊查询异常: '%${}''读取jdbc属性
'%${}''总是传root, 后来发现${username}读取了jdbc里面的属性username,于是将jdbc属性名修改,成功
- Vue中img标签src属性绑定
最近刚刚完成了自己的毕业设计项目,整理一下过程中遇到的问题吧~~~ 我做的是一个基于Vue的信息资讯展示与管理平台,显示首页.详情页等的文章内容时就涉及到了图片展示,项目初始时我搭建的是静态网页结构, ...
- java学习-初级入门-面向对象③-类与对象-类与对象的定义和使用1
今天学习类与对象.先大致解释一下类与对象的含义. 对象:object 有物体这一概念,一切皆对象(物体),对象由静态的属性和动态的行为组成. 比如说水杯: 水杯的静态属性:材质,容量,质量,颜色 动态 ...
- 启动nginx出错:open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
[emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 解决:mkdir / ...
- jquery源码部分分析
1.整体架构和如何辨别浏览器端和node端 自执行函数,判断在什么端,如果在浏览器端就执行factory函数 //(function(){a,b})(a,b) //jq大架构,闭包,自执行函数,传入函 ...
- 车林通购车之家--购车计算器模块--算法js
//CarCalculator.js var checkedClass = "jsq-item-check jsq-item-checked"; var uncheckedClas ...
- leetcode200 Number of Islands
""" Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:内存操作流、管道流与打印流操作
import java.io.* ; class Send implements Runnable{ // 线程类 private PipedOutputStream pos = null ; // ...