1002 写出这个数

article/2025/8/29 18:28:49

想好好写一下这个题,因为一开始写了一百多行都没有写正确…
如果不想看那么多直接拉到最后看代码,但是也许我的解题过程会对你有帮助。
在这里插入图片描述
之前的思路:
用除10取余循环计算得到一个sum也就是各个数字的和,然后把sum倒转回来在除10取余得到一个一个数字(因为取余首先得到的输出是个位数,但是要先输出最高位数,我就先把它倒转过来再用这种方法),然后用一个switch case去把各个拼音写出来,在写一个小小的循环去调用那个swtich的同时判断是不是最后一个数字,看要不要空格。

这个思路错在哪里呢,最大的问题在于我始终是用数字再计算,但是我们可以看到,给出的样例,他的数字是非常大的,题目写了保证小于10^100次方,这是int和long int等都无法表示的范围,后来我还想过写一个大整数的类去保证能处理这么大的整数(之前学c++有过这么一个写大整数的类),但是看了一下代码是很长一坨的,用来做这个显然不太合理。在查怎么处理大整数的时候看到有人说可以用字符数组来出来,有了这个思路这道题就向后推了一推,大整数肯定是可以处理 了。但是我还是没有放弃我反转sum的思路,最后提交上去了,20分只得了19分。为什么呢?思考了一下,每次用这个反转的操作会存在一个问题,就是如果sum=10,用一个反转的话,得到的是1而不是01。这一点如果是字符数组的话好处理,但是一直在用整数运算的话就是不行的。或者不要把函数分开写,直接一遍得那个数一遍就开始输出拼音。如果用一个字符数组去反转用while倒过来这也是可以处理的。(这种思路也贴一个代码在后面)最后我没有选择用字符数组去倒过来输出,选择用了栈,他的特点很明确,后进先出,刚刚push,pop之后就满足要求,而且还可以顺便把空格怎么弄给判断了。

共识:输入都是用字符数组处理(因为大整数)

以下2.3种解法是满分的。

1.之前写的全部用整数反转,19分。
问题在于不能处理个位数是0的情况。
在这里插入图片描述

2.一边反转整数一边输出拼音(这是别人的代码,还有些不简洁的地方,我直接贴过来了)
可以解决末尾是0的问题,因为不用返回一个整数,0直接就输出ling了。

#include<iostream>
using namespace std;
int main()
{char x[10000];int s[10000];int y[10000];int g = 0;int sum = 0;cin >> x;for (int i = 0; x[i] != '\0'; i++){s[i] = x[i] - 48;sum += s[i];}if (sum == 0)cout << "ling";else{while (sum != 0){int k;k = sum % 10;y[g++] = k;sum = sum / 10;}}for (int i = g - 1; i >= 0; i--){switch (y[i]){case 0:if (i != 0)cout << "ling" << " ";else cout << "ling"; break;case 1:if (i != 0)cout << "yi" << " "; else cout << "yi"; break;case 2:if (i != 0)cout << "er" << " "; else cout << "er"; break;case 3:if (i != 0)cout << "san" << " "; else cout << "san"; break;case 4:if (i != 0)cout << "si" << " "; else cout << "si"; break;case 5:if (i != 0)cout << "wu" << " "; else cout << "wu"; break;case 6:if (i != 0)cout << "liu" << " "; else cout << "liu"; break;case 7:if (i != 0) cout << "qi" << " "; else cout << "qi"; break;case 8:if (i != 0)cout << "ba" << " "; else cout << "ba"; break;case 9:if (i != 0)cout << "jiu" << " "; else cout << "jiu"; break;}}return 0;
}

3.用栈处理,这时候如果有0还是一个一个原封不动的push进去了。
不过我也是一边用栈一边输出,这样其实和上面那种没什么区别,用不着栈了,但也是一种思路


#include<iostream>
#include<string>
#include<stack>
using namespace std;void print(int sum)
{string name[] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };stack<int>r_sum;while (sum > 0){r_sum.push(sum % 10);sum /= 10;if (sum == 0){while (!r_sum.empty()){cout<<name[r_sum.top()];r_sum.pop();if (!r_sum.empty()){cout << " ";}}}}
}int main()
{char ch;int sum = 0;while ((ch = getchar()) != '\n'){sum = sum + ch - '0';}print(sum);
}

4.无比简洁的大神做法,只用了是十多行(这个代码也是别人那里贴过来的)
(但这种方法我去提交的时候是0分,提示的是编译错误。看逻辑是没有问题的,在我的编译器上也是完美运行)
前面的代码写这么多主要还是为了处理取余输出的问题,这个就不一样了,直接用了一个sprinf,作用就是把sum里面的数字一位一位的剥离出来,存在一个字符数组里面,等下就直接输出了。
大神把库函数用起来得心应手啊,就像现实生活中的阅历一样,只有厉害两字可说。
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{int sum = 0;char ch, s[4];                       //ch作为临时变量保存输入的每一个字符,s保存sum的每一个数字 ,因为题目小于1000                       char b[10][5] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };while ((ch = getchar()) != '\n')    //如果一直输入字符,不按回车的话 sum += (ch - '0');sprintf_s(s, "%d", sum);              // sprintf(char *buffer, const char *format,[ argument])将任意类型数据按某种格式转换成字符串 for (int i = 0; s[i] != 0; i++) {if (i > 0) //消除第一个空格 printf(" ");printf("%s", b[s[i] - '0']);}return 0;//上文sprintf中s为s[4]数组名,将sum的值存放在s中 
}

http://chatgpt.dhexx.cn/article/lZvpw32T.shtml

相关文章

1002 写出这个数 ——c++实现

1.题目介绍 2. 思路 这道题目较好理解&#xff0c;只是实现起来有几点要注意&#xff1a; &#xff08;1&#xff09;正整数的范围。题目中规定n<10^100&#xff0c;这是个很大的数字。long long类型最大到2^63-1&#xff0c;也远小于这个数。但我最开始没有考虑这一点&am…

1002 写出这个数 (C语言实现)

题目描述&#xff1a; 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10^100。 输出格式&#xff1a; 在一行内输出…

算法竞赛入门经典训练指南 pdf

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 下载地址&#xff1a;网盘下载 基本介绍 编…

《算法竞赛入门经典》Chap3

《算法竞赛入门经典&#xff08;第二版&#xff09;》第三章 思考题题目1 必要的存储量题目2 统计字符1的个数 示例程序程序3-1 逆序输出程序3-2 开灯问题程序3-3 蛇形填数程序3-4 竖式问题 例题例题3-1 Tex中的引号 (Tex Quotes, UVa 272)例题3-2 WERTYU (WERTYU, UVa 10082)例…

【算法竞赛从入门到精通】【基础算法】

基础算法 贪心法的基本思想如何判断一个题目能用贪心法&#xff1f;常见问题最少硬币问题活动安排问题&#xff08;区间调度问题&#xff09;区间覆盖问题最优装载问题多机调度问题 Huffman编码[poj 1521"Entropy"](http://poj.org/problem?id1521) 模拟退火 使用分…

算法竞赛入门经典习题

第一章&#xff1a;程序设计入门 总结 1、%.2f 表示保留两位小数 2、const double Piacos(-1.0) //尽量用const声明常量 3、三整数排序&#xff1a; If(a>b) {交换} if(a>c){交换} if(b>c){交换}第二章&#xff1a;循环结构设计 总结 1、重复次数可变、递增&…

《算法竞赛入门经典(第2版)》

《算法竞赛入门经典(第2版)》 基本信息 作者&#xff1a; 刘汝佳 丛书名&#xff1a; 算法艺术与信息学竞赛 出版社&#xff1a;清华大学出版社 ISBN&#xff1a;9787302356288 上架时间&#xff1a;2014-6-5 出版日期&#xff1a;2014 年6月 开本&#xff1a;16开 页码&…

《算法竞赛入门经典》(第二版)代码及详细解释(持续更新!)

笔者中山大学硕士&#xff0c;医学生计科学生的集合体&#xff0c;机器学习爱好者。 现发布【刘汝佳《算法竞赛入门经典》&#xff08;第二版&#xff09;——紫书】的例题和习题的代码和详细解释。 欢迎批评指正&#xff01; 另外欢迎关注本人微信公众号——程序员Yukyin …

算法竞赛入门知识干货

前言&#xff1a;本篇总结一部分来自刘汝佳老师的《算法竞赛入门经典》&#xff0c;一部分是个人竞赛学习中的一些算法知识点总结&#xff0c;是初学算法走了不弯路一点点积累起来的干货&#xff0c;对刚刚参加竞赛的盆友应该会很有帮助&#xff0c;如有不足请提出 一.程序设计…

《算法竞赛入门经典》——刘汝佳

“构造性”和“可行性”是计算机学科的两个最根本特征。 比赛的核心是算法 #1 语言篇 编程不是看会的&#xff0c;也不是听会的&#xff0c;而是练会的&#xff0c;所以应尽量在计算机旁阅读书本&#xff0c;以便把书中的程序输入到计算机中进行调试&#xff0c;顺便再做做上机…

ntoskrnl.exe占用大量cpu解决方法

ntoskrnl.exe 计划任务里面结束关于空闲时段内存自检的任务

ntoskrnl.exe占用cpu高

winr -->control 打开控制面板 还是过高&#xff0c;重启即可 转载于:https://my.oschina.net/u/2425353/blog/3081583

Win10开机提示蓝屏错误ntoskrnl.exe怎么修复?

1、下载bluescreenview软件。 2、下载后解压缩&#xff0c;启动就可以查看蓝屏原因了&#xff01;如下图所示 3、发现问题出在ntoskrnl.exe这个文件上&#xff0c;我重新下载这个文件替换也没用&#xff01; 4、继续解决问题&#xff0c;同时按下winX按键&#xff0c;如下图…

计算机反复蓝屏问题--ntoskrnl.exe

最近电脑反反复复地蓝屏吗&#xff0c;尤其是在电脑开机但又没怎么用的情况下。 使用联想电脑管家分析问题 下载了蓝屏分析诊断工具&#xff0c;提取码&#xff1a;5dti 检测出来问题根源是ntoskrnl.exe 解决方案&#xff1a; ① 参考博客1 控制面板----管理工具----任务计…

ntoskrnl.exe蓝屏

win10装完系统后频繁蓝屏,用bluescreen工具检测后,提示ntoskrnl.exe文件导致; 按照以下步骤处理: 1、在开始菜单上单击右键或按下win+x,点击命令提示符(管理员); 2、在命令提示符中输入: chkdsk c: /f 按下回车键,会弹出如下提示: 3、提示:是否计划在下次系统重…

win10一直蓝屏!一直是这个代码,ntoskrnl.exe导致,要废了。。

几个月了&#xff0c;一直都是这样&#xff0c;刚开始的系统1909&#xff0c;中间用过20H2、21H1&#xff0c;一直到现在的22H2&#xff0c;这个蓝屏问题一直没解决&#xff0c;网上的方式都试了&#xff0c;不行&#xff01;重装了几次系统也没解决&#xff0c;从WIN10 专业版…

Windows内核Shellcode获取ntoskrnl.exe基址

使用NASM编译以下汇编代码 BITS 64 ORG 0section .textglobal _start _start:push rbxmov rax,QWORD [gs:0x38]mov rax,QWORD [rax0x4]shr rax,0xcshl rax,0xc _x64_find_nt_walk_page:mov rbx,QWORD [rax]cmp bx,0x5a4dje _foundsub rax,0x1000jmp _x64_find_nt_walk_page _f…

ERROR: Module load completed but symbols could not be loaded for ntoskrnl.exe Loading Kernel Symbols

电脑蓝屏问题ERROR: Module load completed but symbols could not be loaded for ntoskrnl.exe Loading Kernel Symbols 1.先找出蓝屏日志&#xff1a;C:\Windows\Minidumpc 2.此文件记录了蓝屏的具体原因,由于是dmp文件,这里我是用的是windbg工具进行解析,此工具可以在某讯…

ntoskrnl.lib(loadcfg.obj) : error LNK2001: 无法解析的外部符号 ___security_cookie 解决方法

背景 今天编译公司x86驱动的时候发现了如下报错&#xff0c;我也奇怪&#xff0c;为什么会找不到符号 后来发现是因为用的xp的lib。ObRegisterCallbacks最少都是sp1 改为win7\i386,错误变成了 后来在网上找了找&#xff0c;都是一个人写的&#xff0c;被反复的转载&#xff0c…

ntoskrnl.exe导致Win10蓝屏的解决方案(转载)

转自&#xff1a;https://zhuanlan.zhihu.com/p/37619207 下面两个方案都操作了&#xff0c;暂时三天了没有再出现蓝屏&#xff08;之前一两天必然出现一次&#xff09;&#xff0c;具体哪个起作用也不清楚&#xff0c;只要不再蓝屏就好。 我的PC是自己安装的兼容机。起初安装…