题目
基本思路
相信大家能找到这个博客肯定都是有对这道题经过一定思考之后再搜索的,想分享一下一个计算机系大二学渣的基本思路,目前我们还没有学【数据结构】之类的专业课,和其他大佬们比起来我唯一的优势或许就是能够解释的比较通俗易懂啦。其实开博客的,目的也就只是想要记录一下自己解这些题目的时候的思维,方便日后查漏补缺和更新。
以下是我的剖析:
- 首先是输入要求,是一个自然数,且不超过101位,有一定基础的同学肯定就已经知道了这个数过大超过了int、long之类的范围,只能通过char来定义了(非常惭愧的表示我好像java学的比c好一点,最近才开始补c可能废话会比较多)
- 输入问题解决了之后我们就要开始想下一步,也就是如何把这一串字符单个还原成int类型进行加运算。这里我搜了两个方法。一个是使用指针,btw这个不熟,我们用更简单的方法,直接ASCII码转换,用字符1减去48或者减去‘0’,这样我们就能得到整型的1
- 每一位数相加用for循环遍历 这个很简单就不多提
- 最后是输出拼音数字的问题,最开始我想用switch来实现,但是那样的话代码就太长了看着非常不清晰,最后我选择了定义一个字符串数组去存储我要输出的那十个数字拼音。(说来好笑,我还是算了一遍确定了无论如何之前求得的数字和都不会多过三位数才放心用if去做输出的。)
###其他一些琐碎的东西###
最开始输出我用了switch嘛,其实非要用也可以的,定义一个函数也是很简单的。但关键是–最开始我完全没有想过用函数,记录一下最开始这个输出的傻代码。
switch(i/100)
{
case 0:break;
case 1:printf("yi ");break;
case 2:printf("er ");break;
case 3:printf("san ");break;
case 4:printf("si ");break;
case 5:printf("wu ");break;
case 6:printf("liu ");break;
case 7:printf("qi ");break;
case 8:printf("ba ");break;
case 9:printf("jiu ");break;
}
if(i/100==0)
{
switch(i/10)
{
case 0:break;
case 1:printf("yi ");break;
case 2:printf("er ");break;
case 3:printf("san ");break;
case 4:printf("si ");break;
case 5:printf