poj2389 大数问题-大数相乘
发布时间:2020-12-14 02:24:57 所属栏目:大数据 来源:网络整理
导读:直接贴模板 #includeiostream#includestringusing namespace std;const int size=1000; //大数位数void mult(char* A,char* B,char* ans){int a[size+1]={0};int b[size+1]={0};int pa=0,pb=0;int c[2*size+1]={0};int lena=strlen(A);int lenb=strlen(B);fo
直接贴模板
#include<iostream> #include<string> using namespace std; const int size=1000; //大数位数 void mult(char* A,char* B,char* ans) { int a[size+1]={0}; int b[size+1]={0}; int pa=0,pb=0; int c[2*size+1]={0}; int lena=strlen(A); int lenb=strlen(B); for(int i=lena-1;i>=0;i--) a[pa++]=A[i]-'0'; for(int j=lenb-1;j>=0;j--) b[pb++]=B[j]-'0'; for(pb=0;pb<lenb;pb++) { int w=0; //低位到高位的进位 for(pa=0;pa<=lena;pa++) { int temp=a[pa]*b[pb]+w; w=temp/10; temp=(c[pa+pb]+=temp%10); c[pa+pb]=temp%10; w+=temp/10; } } bool flag=false; bool sign=false; //标记ans是否为全0 for(pa=0,pb=lena+lenb-1;pb>=0;pb--) { if(!flag && c[pb]==0) //删除ans开头的0 continue; else flag=true; sign=true; ans[pa++]=c[pb]+'0'; } if(sign) ans[pa]=' '; else { ans[0]='0'; ans[1]=' '; } return; } int main(void) { char a[size+1]; //被乘数 char b[size+1]; //乘数 char ans[2*size+1]; //结果 while(cin>>a>>b) { mult(a,b,ans); cout<<ans<<endl; } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |