下面給出高精度除法的源代碼,可以實(shí)現(xiàn)任意除法計(jì)算至循環(huán)。
#include<iostream>#include<Windows.h>using namespace std;bool CheckIfLoop(int *remainarr, int length, int remain,int loop);int main(){ int dividend, divisor, remain=0,k=0;//dividend為被除數(shù),divisor為除數(shù),remain為余數(shù),k為當(dāng)前余數(shù)列表 cout << "請(qǐng)輸入被除數(shù)與除數(shù):"; cin >> dividend >> divisor; int *remainarr = new int[512]; cout << "結(jié)果為:"; cout << dividend / divisor; if (remain != 0 || dividend%divisor!=0)//余數(shù)為0,除盡,結(jié)束循環(huán) { cout << ".";//輸出小數(shù)點(diǎn) } remain = dividend%divisor; while (CheckIfLoop(remainarr, 512, remain,k) && remain!=0) { remainarr[k] = remain; remain *= 10; cout << remain / divisor; remain %= divisor; if (k < 512) { k++; } } system("pause"); return 0;}bool CheckIfLoop(int *remainarr, int length, int remain, int loop){ static int looptime = 0; for (int i = 0; i < length; i++) { if (remainarr[i] == remain) { cout << "(無(wú)限循環(huán)開(kāi)始,周期:" << looptime << ")"<<endl; remainarr[loop] = remain; return 0; } } looptime++; return 1;}說(shuō)明,余數(shù)列表設(shè)為512位是根據(jù)相關(guān)定理,所有分?jǐn)?shù)都是有理數(shù),并且是循環(huán)小數(shù),開(kāi)始我把余數(shù)列表的長(zhǎng)度定位除數(shù)的大小,但是后來(lái)發(fā)現(xiàn)這樣在余數(shù)很大的情況下十分占用內(nèi)存,所以設(shè)定為了512,在一定范圍內(nèi)有效。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注