karatsuba乘法-出自王晓东老师的《计算机算法设计与分析》
目前第一次实现,基本上处理了负负相乘,正正相乘,正负相乘的情况,仍有很多可以改进的地方,例如大整数加法和减法都是复制自己以前写的代码片,为了互用性,降低 了效率,先暂作记录。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string Add(string num1, string num2);
string Sub(string num1, string num2);
string Mul(string num1, string num2);
void OUTPUT_Mul(string num1, string num2);
string ChangeDigt(string num, int n);
void swap(string& a, string& b);
int main(int argc, char* argv[])
{
int i , size,n;
char exit;
string bignum1, bignum2;
while(true)
{
bignum1 = "";
bignum2 = "";
cout << "Please input num1: ";
cin >> bignum1;
cout << endl;
cout << "Please input num2: ";
cin >> bignum2;
cout << endl << "num1 * num2 = ";
OUTPUT_Mul(bignum1, bignum2);
cout << endl << "Continue? y/n" << endl;
cin >> exit;
if (exit == 'n' || exit == 'N')
break;
}
return 0;
}
void OUTPUT_Mul(string num1, string num2)
{
int i, size, n;
string mul;
int begin1 = 0, begin2 = 0;
if (num1[0] == '-')
{
begin1 = 1;
//处理负号
num1[0] = '0';
}
if (num2[0] == '-')
{
begin2 = 1;
//处理负号
num2[0] = '0';
}
size = (num1.length() - begin1 > num2.length() - begin2 ) ? num1.length() - be