noi-1738-大整數減法
阿新 • • 發佈:2019-01-26
11:大整數減法
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
-
求兩個大的正整數相減的差。
- 輸入
- 共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多餘的前導零。
- 輸出
- 一行,即所求的差。
- 樣例輸入
-
9999999999999999999999999999999999999 9999999999999
- 樣例輸出
- 9999999999999999999999990000000000000
//noi_1982 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<iomanip> using namespace std; int c[205]={0},d[205]={0}; void initial(int a[]){ string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];i++){ a[i]=s[a[0]-i]-'0'; } for(int i=a[0];i>=1;i--){ if(a[i]==0&&a[0]!=1) a[0]--; else break; } } void printa(int a[]){ if(a[0]==0) { cout<<0; return; } for(int i=1;i<=a[0];i++){ cout<<a[a[0]+1-i]; } cout<<endl; } void plusa(int a[],int b[]){ if(b[0]>a[0]) a[0]=b[0]; for(int i=1;i<=a[0];i++){ a[i]=a[i]+b[i]; a[i+1]+=a[i]/10; a[i]%=10; } if(a[a[0]+1]) a[0]++; } int compareab(int a[],int b[]){ if(a[0]>b[0]) return 1; if(a[0]<b[0]) return -1; for(int i=a[0];i>=1;i--){ if(a[i]>b[i]) return 1; else if(a[i]<b[i]) return -1; } return 0; } void minusa(int a[],int b[]){ int ok=compareab(a,b); //cout<<ok<<endl; if(ok==0) { a[0]=0; return; } if(ok==-1){ cout<<'-'; a[0]=b[0]; for(int i=1;i<=a[0];i++){ int temp; temp=a[i]; a[i]=b[i]; b[i]=temp; } } // printa(c); // printa(d); for(int i=1;i<=a[0];i++){ a[i]=a[i]-b[i]; if(a[i]<0){ a[i]+=10; a[i+1]--; } } if(a[a[0]]==0) a[0]--; } int main(){ initial(c); initial(d); minusa(c,d); printa(c); return 0; }
要注意判斷哪個數是被減數。