大數除法的核心:把除法運算轉化為減法運算,根據除法運算的特點,
有兩個大整數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#includeintmain()
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...