問題描述
求兩個不超過200位的非負整數的積。
輸入形式
有兩行,每行是乙個不超過200位的非負整數,沒有多餘的前導0。
輸出形式
一行,即相乘後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。
樣例輸入
1234567890
9876543210
樣例輸出
12193263111263526900
1 :採用了陣列的形式進行計算。將輸入的值以字元的形式存到陣列中取,再轉化成整數形式相乘。
2. 根據課本的描述採用分治的方法求解。主要部分是遞迴的不同種情況。當n=2時直接求解,當n>2,則對其進行分治。按照公式:a*b=a1*b1*10^n+[(a1+a0)*(b0+b1)-a1*a0-b1*b0]*10^n/2+a0*b0求解
#include#includeusing namespace std;
int main();
cin>>a;
cin>>b;
int lena = strlen(a);
int lenb = strlen(b);
int i,j;
for(i=lena-1,j=0;i>=0;i--)
for(i=lenb-1,j=0;i>=0;i--)
for(i=0;i=10)
}for(i=400;i>0;i--)
for(;i>=0;i--)
cout《第二種:
#include#include#include#includeusing namespace std;
//string轉換為int
int str_to_int(string s)
//int轉換為string
string int_to_str(int num)
//前置0 ,因為大數的長度必須要為2^n的倍數,才能劃分
//去掉前置零,substr()複製子字串
void removeprezero(string &s)
//大數相加
string add(string s1, string s2)
return s;
} //大數相減
string sub(string &s1, string &s2)
else if (s1.at(i) < s2.at(i))
} if (i == len1)s == "0";
} int* num = (int*)malloc(sizeof(int)*len);
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
int c = 0; //記錄結果位數
for (int i = 0; i < len; i++)
for (int j = 0; j < c; j++)
} c--;
//去除可能存在的前置零
while (num[c] == 0)c--;
for (int j = 0; j <=c; j++)
if (flag == "-")return flag + s;
else return s;
}//增加前置0
void addprezero(string &s, int l)
//增加後置0,大數*10^n 相當於在數的後面加n個0
string addlastzero(string s, int l)
//大數相乘
string mult(string &s1, string &s2)
if (s2.at(0) == '-')
if (flag1 || flag2) sign = "-";
else sign = "+";
int l = 4;
//前置若干個0,使長度為2^n的倍數
if (s1.length() > 2 || s2.length() > 2)
else
} if (s1.length() == 1)addprezero(s1, 1);
if (s2.length() == 1)addprezero(s2, 1);
//進行運算
int n = s1.length();
string result, a0, a1, b0, b1;
if (n > 1)
if (n == 2) else
if (sign == "-")result.insert(0, sign);
return result;
}int main()
分治演算法 大整數乘法
用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。分析 用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。演算法描述 兩個十進位制的數 x y x a 10 n1 b y c 10 n2 d 則 x y a 10 n1 b c 10 n2 d 設乙個陣列,將其看做10000 進製...
演算法 大整數求和 乘法
大整數乘法 以 426709752318 95481253129 為例,來看看大整數相加的詳細步驟 建立2個陣列,把整數倒序儲存 整數的個位存於陣列0下標位置,最高位存於陣列長度 1下標位置。之所以倒序儲存,更加符合我們從左到右訪問陣列的習慣。建立結果陣列,結果陣列的最大長度是較大整數的位數 1 遍...
大整數乘法
參考 http hi.baidu.com operationsystem blog item 6e45dd1af1acadf3ae51330b.html 在計算機中,長整型 long int 變數的範圍是 2147483648 至 2147483647,因此若用長整型變數做乘法運算,乘積最多不能超過...