C语言字符串数字转换为数字
本章不使用<stdlib.h>中提供的字符串数字转换为数字的函数
char *itoa(int _Val, char *_DstBuf, int _Radix);//该函数是非标准库所提供的
up主提供一种C语言字符串数字转换为数字的思路:

如图所示,将十位,百位单独计算出来,然后加上个位得到完整的数字。
学过基础的朋友应该了解过ASCII字符集,在0~127的范围内包含了控制字符,显示字符,其中48~58为数字字符,即0~9。转换个位的字符数字很轻松,可是十分位、百分位、及更大的数就不好计算了。
为此,up做了很多草稿,分析他们的规律变化:

查询资料,C标准库有一个函数可以帮助我们升幂:
double pow (double base, double exponent);
这样够了吗?当然没有,好戏才刚刚开始。
up决定手撕幂次函数,用自己的办法实现一遍,以便加深对C语言的理解。
经过几个小时的苦思冥想,发现了好几种方法:循环遍历相乘,递归相乘。递归相乘是最先想到的,这里就讲讲如何使用递归实现功能。
如果不了解递归,这里讲个简单的例子:俄罗斯套娃。
以下的代码展示:
在第四行我们看到了递归的发生——函数调用自身。
递归由两部分组成,传递与回归。函数结构大致分为两个部分,一、是检验数据是否达到递归出口的条件,二、是筛选递归之外的情况,然后进行处理。
第一个是 if ,判断相乘剩余的次数,如果剩余次数在1次以上,则继续传递。
第二个 else if ,筛选特例数据,当一开始提供的次方数为0时的情况。
第三个是 else ,一旦pow为1时,回归开始发生。
以下是样例代码,有些许潦草,但包含了一些标记,希望对你们有所帮助:
结果输出:
还有一种方法是遍历相乘法
原理是通过变量,控制相乘的次数。
以下提供简短的代码:
但代码并不牢靠,还要对 pow 为 0 时的特殊情况进行考虑,在这里就不再赘述。