给定两个字符串,对其求积。原理:对于乘数和被乘数,例如9*9,计算的结果位数最多为2位,也就是说,任意一个数,乘以9,结果最多增加1位,所以,对于i位乘数和j位被乘数,所得到的结果最多为i+j位。在结果中,第i+j位的值为乘数中第i位乘以被乘数第j位和乘数第j位乘以被乘数第i位的值的和。但根据遍历可知,若初始化结果数组大小为i+j个数,最大遍历数只能到i+j-1,最后一位永远是0,所以初始化为i+j-1个数,若结果为i+j位,我们就对最高位即result[0]的数值不进行进位处理,得到的就是期望的乘积值。
在后期处理中,因为结果中的极有可能是大于9的,所以要进行向高位进位处理。
代码如下:
void main()
{
string value1,value2;
cin>>value1>>value2;//输入数字,第0为为最高位
int size1 = value1.size();
int size2 = value2.size();
int size =size1 +size2-1;
vector<int> result(size,0);//保存结果
for(int i = 0;i < size1;++i)
{
for(int j = 0;j < size2;++j)
{
result[i+j] += (value1[i]-'0') * (value2[j]-'0');
}
}
for(int i = size-1;i>0;--i) //进位处理,第0位为最高位,所以即便大于10也可以不用处理,输出时结果是一样的
{
result[i-1] +=result[i]/10;
result[i] %= 10;
}
int no_zero = size-1;
while(result[no_zero] == 0)
{
--no_zero;
}
for(int i = 0;i < size;++i)
{
cout<<result[i];
}
system("pause");
}