大数相乘
发布时间:2020-12-14 02:49:34 所属栏目:大数据 来源:网络整理
导读:#include bits/stdc++.husing namespace std;void reverse(char *str){int length=strlen(str);for (int i=0;ilength/2;i++){int t=str[i];str[i]=str[length-1-i];str[length-1-i]=t;}}int main(){int T;scanf("%d",T);while (T--){char s1[200]={0},s2[200
#include <bits/stdc++.h> using namespace std; void reverse(char *str) { int length=strlen(str); for (int i=0;i<length/2;i++) { int t=str[i]; str[i]=str[length-1-i]; str[length-1-i]=t; } } int main() { int T; scanf("%d",&T); while (T--) { char s1[200]={0},s2[200]={0},ans[200][200]={{0}},result[200]={0}; scanf("%s%s",s1,s2); int length1=strlen(s1); int length2=strlen(s2); reverse(s1); reverse(s2); s1[length1]=s2[length2]=0; int i,j,carry=0; for (i=0;i<length2;i++) { carry=0; for (j=i;j<i+length1;j++) { int s1pos=j-i; ans[i][j]=((s2[i]-'0')*(s1[s1pos]-'0')+carry)%10+'0'; carry=((s2[i]-'0')*(s1[s1pos]-'0')+carry)/10; } if (carry!=0) ans[i][j]=carry+'0'; } int maxlength; if (ans[length2-1][length2+length1-1]==0) maxlength=length1+length2-2; else maxlength=length1+length2-1; carry=0; int total; for (i=0;i<=maxlength;i++) { total=carry; for (j=0;j<length2;j++) { if (ans[j][i]==0) ans[j][i]='0'; total+=ans[j][i]-'0'; } carry=total/10; result[i]=total%10+'0'; } if (carry!=0) result[i++]=carry+'0'; result[i]=0; for (i=strlen(result)-1;i>=1;i--) if (result[i]=='0') result[i]=0; else break; reverse(result); printf("%sn",result); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |