Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
17688 | xingru | 高精度乘低精度 | C++ | 通过 | 0 MS | 272 KB | 1788 | 2023-05-17 18:15:47 |
#include<bits/stdc++.h> using namespace std; struct bign{ int d[1000]; int len; bign(){ len = 0; memset(d,0,sizeof(d)); } }; bign change(char str[]){ bign a; int len=strlen(str); for(int i=0;i<strlen(str);i++){ a.d[a.len]=str[len-i-1]-'0'; a.len++; } return a; } void print(bign a){ for(int i=a.len-1;i>=0;i--){ cout<<a.d[i]; } } bool compare(bign a,bign b){ if(a.len>b.len){ return true; } else if(a.len<b.len){ return false; } else{ for(int i=a.len-1;i>=0;i--){ if(a.d[i]>b.d[i]){ return true; } else if(a.d[i]<b.d[i]){ return false; } else continue; } return true; } } bign add(bign a,bign b){ bign c; int carry=0; for(int i=0;i<a.len||i<b.len;i++){ int temp=a.d[i]+b.d[i]+carry; c.d[i]=temp%10; c.len++; carry=temp/10; } if(carry>0){ c.d[c.len]=carry; c.len++; } while(c.d[c.len-1]==0&&c.len>1){ c.len--; } return c; } bign sub(bign a,bign b){ bign c; bign d; for(int i=0;i<a.len;i++){ if(a.d[i]<b.d[i]){ a.d[i+1]--; a.d[i]+=10; c.d[i]=a.d[i]-b.d[i]; } else c.d[i]=a.d[i]-b.d[i]; c.len++; } while(c.d[c.len-1]==0&&c.len>1){ c.len--; } return c; } bign multi(bign a,bign b){ bign c; c.len=a.len+b.len; for(int i=0;i<a.len;i++){ for(int j=0;j<b.len;j++){ c.d[i+j]+=a.d[i]*b.d[j]; } } int carry=0; for(int i=0;i<c.len;i++){ c.d[i]+=carry; carry=c.d[i]/10; c.d[i]%=10; } while(c.d[c.len-1]==0&&c.len>1){ c.len--; } return c; } int main(){ char s1[100],s2[100]; cin>>s1; cin>>s2; bign a=change(s1); bign b=change(s2); // if(compare(a,b)==1) print(sub(a,b)); // else{cout<<"-"; // print(sub(b,a)); // } print(multi(a,b)); return 0; }