用串的形式表示大數的乘法。
即求類似: "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...