大數除法(lld最多19位)

2022-05-24 16:51:11 字數 1642 閱讀 9365

大數除法的核心:把除法運算轉化為減法運算,根據除法運算的特點,

有兩個大整數a和b,當a==b時,a/b==1,餘數是0。(a!=0,b!=0)

當a>b時,a/b>=1,餘數需要通過計算求得。

當a以7546除23為例。

先減去23的100倍,就是2300,可以減3次,餘下646。   此時商就是300;

然後646減去23的10倍,就是230,可以減2次,餘下186。此時商就是320;

然後186減去23,可以減8次,此時商就是328.

特例本題要求計算a/b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a = b * q + r成立。

#include#include

intmain()

for(i=0;i)

i=0;

while(q[i]=='0'

) i++;

for (; i < len; i++)

printf("%c

", q[i]);

printf("%d

", r);

return0;

}

正常的大數除法

#include#include

#define m 1000005

char

s1[m],s2[m];

inta[m];

void ss(int m)//

減運算

} for(; i)

s1[i]=s1[i]-s2[i]+'0'

;

for(i=m-1; i>j; i--)

if(s1[i]<'0'

)

} int

main()

k=0;

while(1

)

k++;

if(n==m) break

;

for(i=m-1; i>=0; i--) //

在s2前面補0,以便進行減法運算

s2[i+1]=s2[i];

s2[0]='0'

; m++;

s2[m]='

\0';//

strcmp()函式遇到字元'\0'結束

} i=0

;

while(a[i]==0) i++;//

去除前導0

for(; i)

printf("%d

",a[i]);

printf(

"餘數=

");

j=0;//

求餘數

while(s1[j]=='

0') j++;

if(j==n)

for(; j)

printf("%d

",s1[j]-'0'

);

printf("\n

");

} return

0;

}

高精度除法 大數除法

問題描述 給出兩個正整數,計算a b的值,保證a和b的位數不超過500位。輸入描述 輸入兩個用空格隔開的正整數。輸出描述 輸出a b的值。樣例輸入 500 2 樣例輸出 250 解題思路 大數除法的實現有兩種方式 1 用a b,迴圈,直到a 計算過程 擴充套件b的位數 a.length b.lent...

大數運算 除法

include include include include include using namespace std 大數運算最關鍵的是用進製理解,就是把乙個陣列元素表示的最大值作為乙個進製 如此,最容易的大數運算也是最耗費空間的就是乙個元素表示一位數字,即用十進位制表示 還有一種折中的方案,是乙...

大數除法1

string bignum bigdiv string s1,string s2 else else if f1 1 記錄小數字數 for i 0,b 0,f1 0,sl2 0 iif s2 i 除小數點並進行相應記錄 else else if f1 1 記錄小數字數 s1.erase 0,l1 s...