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 ...
随机推荐
- 建设基于TensorFlow的深度学习环境
一.使用yum安装git 1.查看系统是否已经安装git git --version 2.yum 安装git yum install git 3.安装成功 git --version 4.进入指定目录 ...
- Atcoder Grand Contest 037C(贪心,优先队列,思维)
#define HAVE_STRUCT_TIMESPEC//编译器中time.h和phread.h头文件中timespec结构体重名,故加此行#include<bits/stdc++.h> ...
- Golang mysql数据库
基本操作: Open() – create a DB Close() - close the DB Query() - 查询 QueryRow() -查询行 Exec() -执行操作,update,i ...
- Django 学习 之路由层(URL)
路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...
- git安装以及gitlib配置
安装Git:详见http://www.cnblogs.com/xiuxingzhe/p/9300905.html 开通gitlab(开通需要咨询所在公司的gitlab管理员)账号后,本地Git仓库和g ...
- 用Java打开一个网页
BareBonesBrowserLaunch.java 从网上无意间看到的一个工具类,意思是打开一个URL,在不同的操作系统都通用. 1.使用 很简单: String url = "http ...
- HDU 5525:Product 欧拉定理
Product Accepts: 21 Submissions: 171 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072 ...
- 第2节 storm实时看板案例:9、实时看板综合案例
=================================== 10.实时看板案例 10.1 项目需求梳理 根据订单mq,快速计算双11当天的订单量.销售金额.
- P1250 种树 题解
题目描述 一条街道的一边有几座房子,因为环保原因居民想要在路边种些树,路边的居民被分割成 n 块,并被编号为 1…n.每块大小为一个单位尺寸并最多可种一棵树.每个居民想在门前种些树并指定了三个数b,e ...
- Maven项目- Servlet的抽取和优化 java.lang.NoSuchMethodException 的解决方法
优化servlet,减少servlet的数量,便于开发与维护.现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,BaseServlet的抽取和优化,相当于在数据库中一张表对应一个 ...