大数的乘法 Multiply Strings
发布时间:2020-12-14 04:01:37 所属栏目:大数据 来源:网络整理
导读:一、简单版 # includestdio.h# includestring.h# includemalloc.h void multiply(char* a,char* b,char* c){ int i,j,ca,cb,* s; ca=strlen(a); cb=strlen(b); s=(int*)malloc(sizeof(int)*(ca+cb)); for (i=0;ica+cb;i++) s[i]=0; for (i=0;ica;i++) for (j
一、简单版 # include<stdio.h> # include<string.h> # include<malloc.h> void multiply(char* a,char* b,char* c) { int i,j,ca,cb,* s; ca=strlen(a); cb=strlen(b); s=(int*)malloc(sizeof(int)*(ca+cb)); for (i=0;i<ca+cb;i++) s[i]=0; for (i=0;i<ca;i++) for (j=0;j<cb;j++) s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); for (i=ca+cb-1;i>=0;i--) if (s[i]>=10) { s[i-1]+=s[i]/10; s[i]%=10; } i=0; while (s[i]==0) i++; for (j=0;i<ca+cb;i++,j++) c[j]=s[i]+'0'; c[j]=' '; free(s); } 二、增强版? 加入了正负号的处理 # include<stdio.h> # include<string.h> # include<malloc.h> void multiply(char* a,char* c) { int i,*s,cs; int a_sign=1,b_sign=1,c_sign; int a_left,b_left; if(a[0] == '-') { a_left = 1; a_sign = -1; } else{ a_left = 0; } if(b[0] == '-') { b_left = 1; b_sign = -1; } else{ b_left = 0; } ca = strlen(a); cb = strlen(b); cs = ca+cb-a_left-b_left; s=(int*)malloc(sizeof(int)*cs); for(i=0; i<cs; i++) s[i]=0; for(i=a_left; i<ca; i++) for (j=b_left; j<cb; j++) s[i+j+1-a_left-b_left] += (a[i]-'0')*(b[j]-'0'); for(i=ca+cb-1; i>=0; i--) if (s[i]>=10) { s[i-1]+=s[i]/10; s[i]%=10; } i=0; while (s[i]==0) i++; c_sign = a_sign*b_sign; j=0; if(c_sign == -1) { c[0] = '-'; j++; } for(; i<cs; i++,j++) c[j] = s[i] + '0'; c[j]=' '; free(s); } void main() { char a[] = "-123453"; char b[] = "987654"; char c[50]; multiply(a,b,c); printf("%sn",c); } 三、String版本 class Solution { public: string multiply(string num1,string num2) { if(num1.empty() || num2.empty()) return ""; if(num1 == "0" || num2 == "0") return "0"; int len1 = num1.size(); int len2 = num2.size(); int *mul = new int[len1+len2]();//申请动态数组,并初始化为全0 for(int i=0;i<len1;i++) for(int j=0;j<len2;j++) mul[i+j+1] += (num1[i] - '0') * (num2[j] - '0'); for(int i=len1+len2-1;i>0;i--) if(mul[i] >= 10) { mul[i-1] += mul[i]/10; mul[i] %= 10; } string result; int i = 0; if(mul[0] == 0) i++; for(;i<len1+len2;i++) result += (mul[i] + '0'); delete mul; mul = NULL; return result; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |