大數相加 大數相乘 模板
阿新 • • 發佈:2019-02-13
void multiply(const char *a,const char *b)//大數相乘 { 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; // 每個元素賦初值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; } char *c=(char *)malloc((ca+cb)*sizeof(char)); //分配字元陣列空間,因為它比int陣列省! i=0; while(s[i]==0) i++; // 跳過頭部0元素 for (j=0;i<ca+cb;i++,j++) c[j]=s[i]+'0'; c[j]='\0'; for (i=0;i<ca+cb;i++) cout<<c[i]; cout<<endl; free(s); }
string sum(string s1,string s2) //大數相加 { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } for(int i=s1.length()-1,j=s2.length ()-1;i>=0;i--,j--) { s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); if(s1[i]-'0'>=10) { s1[i]=char((s1[i]-'0')%10+'0'); if(i) s1[i-1]++; else s1='1'+s1; } } return s1; }