C/C++程式演算法小練習--大整數減法
阿新 • • 發佈:2019-02-13
//大整數減法: #include <iostream> #include <cstring> using namespace std; void reverse_str(char *a,int size){ for(int i=0;i<size/2;++i){ char t=a[i]; a[i]=a[size-i-1]; a[size-i-1]=t; } } void large_num_sub(){ char a[1000]={0}; char b[1000]={0}; char c[1001]={0}; cin>>a; cin>>b; int a_len=strlen(a); int b_len=strlen(b); reverse_str(a,a_len); reverse_str(b,b_len); int max_len=a_len>b_len?a_len:b_len; //下面的判斷確保大的數減小的數,並根據情況加上"-" if(a_len>b_len){ for(int i=0;i<a_len||i<b_len;++i){ c[i]+=a[i]-b[i]; if(i>=a_len||i>=b_len){ c[i]-='0';//字串數字轉化為實際的數字 } if(c[i]<0){ c[i]+=10; c[i+1]-=1; } } }else if(a_len<b_len){ cout<<"-"; for(int i=0;i<a_len||i<b_len;++i){ c[i]+=b[i]-a[i]; if(i>=a_len||i>=b_len){ c[i]-='0'; } if(c[i]<0){ c[i]+=10; c[i+1]-=1; } } }else{ if(strcmp(a,b)>=0){ for(int i=0;i<a_len||i<b_len;++i){ c[i]+=a[i]-b[i]; if(i>=a_len||i>=b_len){ c[i]-='0'; } if(c[i]<0){ c[i]+=10; c[i+1]-=1; } } }else{ cout<<"-"; for(int i=0;i<a_len||i<b_len;++i){ c[i]+=b[i]-a[i]; if(i>=a_len||i>=b_len){ c[i]-='0'; } if(c[i]<0){ c[i]+=10; c[i+1]-=1; } } } } int j; for(j=max_len;j>0;--j){//去除多餘的前導0 if(c[j]!=0){ break; } } for(int i=j;i>=0;--i){ cout<<(int)c[i]; } cout<<endl; } int main() { large_num_sub(); return 0; }