任意長度的兩個大數的乘法

2021-08-25 21:21:41 字數 2398 閱讀 8339

方法(一):

關於大數乘法,可以使用陣列來模擬小學三年級的乘法豎式計算過程,**如下:

#include "iostream" #include "string" using namespace std; int main(void) } cout<<"兩個大整數相乘的結果為:"; for(i=len-1;i>=0;i--) //如果乙個負,乙個正,做兩數相減 if ( *(clist1.begin()) != '-' && *(clist2.begin()) == '-' ) if ( *(clist1.begin()) == '-' && *(clist2.begin()) == '-' ) if ( *(clist1.begin()) != '-' && *(clist2.begin()) != '-' ) } else if ( length1 > length2 ) } //整數加法,從低位加起,最低位的進製初始為0 int c=0; //低位借位初始為0 int low; //減完後本位的數值 list::iterator iter1 = clist1.end(); --iter1; list::iterator iter2 = clist2.end(); --iter2; for(; iter1!=clist1.begin() && iter2!=clist2.begin();--iter1,--iter2) //雙方最高位相加的處理 int num1 = *iter1 -'0'; int num2 = *iter2 -'0'; low = (num1+num2+c)%10; c = (num1+num2+c)/10; rs.push_front(low+'0'); if ( c != 0 ) return rs; } return rs; } /*******大整數減法*********/ listlong_sub(listclist1, listclist2) //如果一負一正相減,做相加(添符號) if ( *(clist1.begin()) == '-' && *(clist2.begin()) != '-' ) //如果兩負相減,作相減 if ( *(clist1.begin()) == '-' && *(clist2.begin()) == '-' ) //如果兩正相減,做相減 if ( *(clist1.begin()) != '-' && *(clist2.begin()) != '-' ) } else if ( length1 > length2 ) } else if ( *(clist1.begin()) < *(clist2.begin()) ) //整數減法,從低位減起,最低位的借位初始為0 int c = 0; //低位借位初始為0 int low; //減完後本位的數值 list::iterator iter1 = clist1.end(); --iter1; list::iterator iter2 = clist2.end(); --iter2; if (sign != '-' ) low = (num1-num2-c)%10; c = c_new; rs.push_front(low+'0'); } //雙方最高位相減的處理 int num1 = *iter1 -'0'; int num2 = *iter2 -'0'; low = (num1-num2-c)%10; if ( low != 0 ) } else if ( sign == '-' ) low = (num2-num1-c)%10; c = c_new; rs.push_front(low+'0'); } //雙方最高位相減的處理 int num1 = *iter1 -'0'; int num2 = *iter2 -'0'; low = (num2-num1-c)%10; if ( low != 0 ) rs.push_front('-'); //最高位的'-'作為負數的標誌 } return rs; } return rs; } /*******大整數乘法*********/ listlong_mul(listclist1, listclist2) rs.push_back(low+'0'); return rs; } if (clist1.size() == 1 && clist2.size() > 1) int length2 = clist2.size(); //clist2的有效長度(去除'-'號後) if ( length2 > 1 ) int length1 = clist1.size(); //clist1的有效長度(去除'-'號後) if ( length1 > 1 ) if ( high_bit1 != '-' && high_bit2 == '-' ) if ( high_bit1 =='-' && high_bit2 == '-' ) int length1 = clist1.size(); //clist1的有效長度 int length2 = clist2.size(); //clist2的有效長度 if ( length1 == 1 || length2 == 1 ) } else if ( length1 > 1 && length2 > 1 ) } return rs; } return rs; } int main(void) else else cout <

兩個大數相乘

兩個大數相乘 2007 08 27 00 35 question 1 用乙個整型陣列表示乙個大數,陣列的每個元素儲存大數的一位數字,則實際的大數d表示為 d a k 10的k 1次冪 a k 1 10的k 2次冪 a 2 10 a 1 其中a 0 儲存該大數的位數 實現兩個大數相乘 再此基礎上實現兩...

兩個大數相乘

兩個大數相乘 char multiply char char 給了兩個字串,每個都是代表了乙個很長的10進製表示的數 比如 char str1 23456789009877666555544444 char str2 346587436598437594375943875943875 最後求出他們的...

兩個大數相加

兩個大數相加,暫時選擇簡單版本,使用兩個正整數相加,直接上 了,不再囉嗦了。include define maxnum 10000 bool inspectcharvalid char value void add char num1,char num2,char result int main i...