1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int a[101],b[101],c[101],i; 5 //輸入函數 6 void init(int a[]){ 7 string s; 8 cin>>s; 9 a[0]=s.length(); 10 for(i=1;i<=a[0];i++) 11 a[i]=s[a[0]-i]-'0';//減法倒序存儲 12 } 13 //輸出函數 14 void print(int a[]){ 15 int i; 16 if(a[0]==0){ 17 cout<<0<<endl; 18 return; 19 } 20 for(i=a[0];i>0;i--) 21 cout<<a[i]; 22 cout<<endl; 23 return; //函數執行完畢回到主程序 24 } 25 //比較函數 26 int compare(int a[],int b[]){ 27 int i; 28 if(a[0]>b[0]) 29 return 1; 30 if(a[0]<b[0]) 31 return-1; 32 for(i=a[0];i>0;i--){ //如果兩數位數相等,則按位比大小 33 if(a[i]>b[i]) 34 return 1; 35 if(a[i]<b[i]) 36 return -1; //按位比較若該位數相同,則判斷下一位 37 } 38 return 0;//如果返回0則表示兩數相等 39 } 40 //減法模擬除法 41 void jian(int a[],int b[]){ 42 int flag,i; 43 flag=compare(a,b); 44 if(flag==0){ 45 a[0]=0; 46 return; 47 } 48 if(flag==1){ 49 for(i=1;i<=a[0];i++){ 50 if(a[i]<b[i]){ 51 a[i+1]--; 52 a[i]=a[i]+10; 53 } 54 a[i]-=b[i]; 55 } 56 while(a[0]>0&&a[a[0]]==0) 57 a[0]--; 58 return; 59 } 60 } 61 //復制數組 62 void numcpy(int p[],int q[],int det){ 63 for(int i=1;i<=p[0];i++) 64 q[i+det-1]=p[i]; 65 q[0]=p[0]+det-1; 66 /* 67 for(int i=q[0];i>0;i--) 68 cout<<q[i]; 69 cout<<endl; 70 打印復制后的數字,方便理解算法,此算法主要采用低位補0做減法 71 */ 72 } 73 //除法計算 74 void chugao(int a[],int b[],int c[]){ 75 int i,tmp[101]; 76 c[0]=a[0]-b[0]+1; //商的位數不超過被除數的位數-除數的位數+1 77 for(i=c[0];i>0;i--){ //每次循環確定某位商的的值,從高位開始 78 memset(tmp,0,sizeof(tmp)); 79 numcpy(b,tmp,i); 80 while(compare(a,tmp)>=0){ 81 c[i]++; 82 jian(a,tmp); 83 } 84 } 85 while(c[0]>0&&c[c[0]]==0) 86 c[0]--; 87 return; 88 } 89 //主函數 90 int main(){ 91 init(a); 92 init(b); 93 chugao(a,b,c); 94 print(c); 95 print(a); 96 return 0; 97 }