百練2737 大整數除法

2021-08-20 20:30:57 字數 1059 閱讀 8089

計算兩個大整數相除的商。

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

關鍵是寫乙個大整數的減法,然後反覆呼叫該函式進行減法操作。

#include#include#includeusing namespace std;

// 長度為len1的大數b1-長度為len2的大數b2

// 減的結果要存在b1,

// 返回結果的長度,不夠減返回-1,正好減完返回0

int sub(int* b1,int* b2,int len1,int len2)

//不夠減

if(len1==0) //正好夠減,即兩者相等

res[0]++; //減掉一次,商加1

int ntimes = len1 - len2; //減一次後被除數更新,且此時長度為len1

if(ntimes<0)

else if(ntimes>0) //被除數比除數多ntimes位,將除數轉換成和被除數字數相等

}//接下來被除數和除數字數一樣

len2=len1;

//for(int i=len1-1;i>=0;i--) printf("%d",b1[i]);

//printf("\n");

for(int j=0;j<=ntimes;j++)

}//處理結果的進製問題 如100/1問題

for(int i=0;i<=ntimes;i++)

}k=ntimes+1; //最後結果可能進製

while(res[k]==0 && k) k--;

for(int i=k;i>=0;i--)

printf("%d",res[i]);

printf("\n");

return 0;

}

2737 大整數除法

大整數除法 描述求兩個大的正整數相除的商。輸入第1行是被除數,第2行是除數。每個數均不超過100位。輸出一行,相應的商的整數部分 樣例輸入 2376 24樣例輸出 99題意描述 計算位數不超過100位的兩個數的商 整數部分 解題思路 用減法從被除數上一次一次減去除數得到商 程式 include co...

2737 大整數除法

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

百練2981 大整數加法

剛接觸演算法,感覺很奇特.這貨不是數這貨不是數.其實就是模擬 1,num1為第乙個,num2可以為其他的多個數而不止是兩個,num1 num2,然後可以繼續輸入num2 2,用字串存數,所以這貨不是數.3,注意進製 4,注意輸出時,99 1 00的情況 include include include...