大數的乘法

2021-08-17 14:37:57 字數 1494 閱讀 1564

用串的形式表示大數的乘法。

即求類似: "23234845847839461464158174814792" * "6457847285617487843234535"

要求結果返回乙個串。

思路: 

對於大整數的乘法,我們可以利用分治法將其兩個字串從中間截斷,將兩字串的後半部分,進行相乘,記得進製。對於前半部分相乘,前半部分記得補0,然後將兩個數相加。

#include#include#includechar *mymalloccpy(char *s)

char *mymallolink(char *s1, char *s2)

char *zero(int n)

if (n==1)

char *s1 = zero(n/2);

char *s2 = zero(n / 2);

char *s3 = zero(n %2);

//將生成的合成乙個完整的串

char *s1link = mymallolink(s1,s2);

char *s2link = mymallolink(s1link,s3);

return s2link;

}char *add(char *a,char *b)

//分段加

char * a1 = mymalloccpy("0");

char * a2 = mymalloccpy(a);

if (lena>8)

char * b1 = mymalloccpy("0");

char * b2 = mymalloccpy(b);

if (lenb>8)

//後半部分相加

char *t = add(a2,b2);

//判斷是否進1 如果不進製

while (strlen(t)<8)

//進製

if (strlen(t)>8)

char*padd2 = add(a1, b1);

int lenodadd2 = strlen(padd2);

int lenoft = strlen(t);

int lensum = lenodadd2 + lenoft + 1;

char *pok = (char*)malloc(lensum);

memset(pok, 0, lensum);

strcpy(pok, padd2);

strcat(pok, t);

return pok;

}char *multi(char *a,char *b)

char *p = (char *)malloc(len + 1);

memset(p,0,len+1);

//再轉換為字元陣列

_itoa(mult,p,10);

return p;

} if(lena>4)

return multi(b,a);

}int main()

大數的乘法

如下 include include define n 1000 void getdigits int a,char num void multiply int a,int b,int c int main 操作第乙個數字的陣列 int b n 操作第二個數字的陣列 int res n 2 存放結果...

大數加法,大數乘法

include include include typedef struct node pnode 函式宣告 int multiply char strmultipliera,char strmultiplierb,char strrst pnode initlist char strmultipl...

大數問題 大數加法 與 大數乘法 最簡單大數乘法

大數加法很簡單,大叔乘法只是以大數加法為基礎的,光從難度來說,兩者差不多。先舉乙個簡單的例子 所以乘法就是每一位個位數相乘再乘以多少次方就可以了,這個多少次就是兩者的陣列位置的索引相加。看看關鍵 for int i 0 i alen i else result plus result,c heigh...