C和C++中整数最大只能表示10位,不然就会溢出,所以出现了如何避免整数溢出的问题。其中一个方法就是使用字符串来表示,使用字符串的长度是没有限制的。
使用字符串表示整数然后进行乘法运算的关键有如下几点:
- 被乘数和乘数相乘时最开始不处理进位,而是每一位相乘的计算结果都是用整数来保存
- 第一步计算完毕之后从低位到高位开始处理进位
- 不难发现保存计算结果的整型数组的长度是被乘数的长度和乘数的长度之和
- 注意最高位的进位问题
- 将计算完毕后的整形数组转换成字符数组
- 字符数组尾端记得加上\0,整型转字符型时记得加上'0'
基本的算法步骤使用下面的图示来说明:(下面都是针对正整数的运算)
代码实现如下:
// Test9.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include <assert.h>
#include <sstream>
using namespace std;
void multiply(const char * str1,const char * str2)
{
assert(str1!=NULL&