欢迎光临散文网 会员登陆 & 注册

C语言字符串数字转换为数字

2022-07-18 03:26 作者:凫水亿  | 我要投稿

本章不使用<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 时的特殊情况进行考虑,在这里就不再赘述。


C语言字符串数字转换为数字的评论 (共 条)

分享到微博请遵守国家法律