2737 大整數除法

2021-07-30 05:57:09 字數 1257 閱讀 6089

大整數除法

描述求兩個大的正整數相除的商。

輸入第1行是被除數,第2行是除數。每個數均不超過100位。

輸出一行,相應的商的整數部分

樣例輸入

2376

24樣例輸出

99題意描述:

計算位數不超過100位的兩個數的商(整數部分)

解題思路:

用減法從被除數上一次一次減去除數得到商

程式**:

#include

const int n=230;

char str1[n],str2[n];

int  a[n],b[n],result[n];

#include

int substract(int *p1,int *p2,int l1,int l2);

void outputf(int *s);

int main()

for(j=0,i=l1-1;i>=0;i--)

a[j++]=str1[i]-'0';

for(j=0,i=l2-1;i>=0;i--)

b[j++]=str2[i]-'0';

l1=substract(a,b,l1,l2);//先減一次去除不夠減和剛好夠減的情況 

if(l1<=0)

else

}memset(result,0,sizeof(result));

result[0]++;

n=l1-l2;//減過一次後的長度差 

if(n<0)  

else if(n>0)

}l2=l1;//經過之前的處理,除數和被除數長度相等 

for(j=0;j<=n;j++) //依次去除高位補零後相減 

}outputf(result);//輸出結果時記得處理進製 

}return 0;}

int substract(int *p1,int *p2,int l1,int l2) }}

for(i=0;i

p1[i] -= p2[i];

if(p1[i]<0)

} for(i=l1-1;i>=0;i--)

if(p1[i])

return i+1;//返回長度加1 

return 0;

}void output(int *s)

}for(i=n;i>=0;i--)

for(j=i;j>=0;j--) 

printf("%d",s[j]);

printf("\n");

}

2737 大整數除法

描述求兩個大的正整數相除的商。輸入第1行是被除數,第2行是除數。每個數均不超過100位。輸出一行,相應的商的整數部分 樣例輸入 2376 24樣例輸出 99題意描述 計算位數不超過200的兩個大整數的商 解題思路 總體用減法來模擬除法,當然為了讓模擬更高效採用一定的方法。先將被除數和除數分別存進一維...

百練2737 大整數除法

計算兩個大整數相除的商。首先將字串逆序轉換成對應的整型陣列,然後基本思想是做減法,從被除數裡減去多少個除數,商就是多少。為了減的更快一些,可以先減去除數的10的ntimes倍數。如7564 23,先減去23的100倍,發現可以減3次,餘下646,於是商增加300。然後用646減去230,發現可以減2...

大整數除法

define maxint 1000 define max 200 int num1 max 10 int num2 max 10 unsigned int total max 10 int sub int a,int b int i 0 for a b i return i cstring big...