设为首页 加入收藏

TOP

一道C语言面试题:大整数乘法
2019-05-23 14:51:14 】 浏览:78
Tags:一道 语言 试题 整数 乘法

题目:输入两个数字字符串,如“1234567890”和“987654321”,返回二者相乘的结果字符串,如本例返回为“1219326311126352690”。


来源:某500强企业面试题目


思路:从尾部到头部,对两个字串的每个数字分别相乘,并放入结果字符串相应的位置。


如下:


一道C语言面试题:大整数乘法


从工程化角度考虑,有几点需要注意:


1、输入的字符串是否有效?
    上面的代码只判断了是否为空,实际上还有可能输入的字符串并非有效的数字字符串,如“12gh34”,这种也需要返回NULL。


2、前导0的处理
    a位数与b位数相乘,结果长度可能为a+b,如9*99=891;也可能a+b-1是如 10*100=1000。
    在代码的最后部分,对a+b-1的类型进行了移位处理,压缩掉了前导的0。


从编程角度考虑,有几点需要注意:


1、字符串下标从小到大,是从高位到低位。如n=“123”,最高位n[0]=1,最低位n[2]=3。


2、字符ASCII码与字符的转换,如n[3]=5这是纯数字,而+'0'后有n[3]='5'这就是字符了。


3、数字交叉相乘的进位处理,通过 >=10来判断进位,此处注意不要写成>10;另外注意多次叠加,所以使用 +=


4、malloc()的返回值是(void *),为了让编译器happy,需要强制转为(char *),而且最后需要free来释放它申请的内存。


5、字符'0'和字符串“0”的区别


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇理解 KMP 算法 下一篇TypeScript 中非代码模块的导入

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目