高精度 大整數開根

2021-07-05 19:30:56 字數 1551 閱讀 1946

二分法

#include

#include

#include

using

namespace

std;

int n,nlen;

char str[22];

int c[1000];

int a[1000],b[1000],d[1000];

int isok(int len)

for(i=0;ifor(j=0;j2*len-1;

for(i=0;i1]+=b[i]/10;

b[i]%=10;

}while(b[len])

if(len-t//整數字數小於給定的n的長度,則返回小於

return -1;

if(len-t>nlen) //返回大於

return

1; for(i=len-1,j=nlen-1;i>=0 && j>=0;i--,j--)

while(i>=0)

return

0; //等於

}int main()

l=1;r=n;

int flag=0; //標記是否相等

while(l<=r) //求整數部分

else

if(tt<0)

else

if(tt==0)

}c[0]=t;

for(i=1;i<120;i++) //模擬開方的前119位小數

else

if(tt<0)

else

if(tt==0)

}c[i]=t;

}printf("%d.",c[0]);

for(i=1;i<120;i++)

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

printf("\n");

}return

0;}

手動開根號的基本方法:

將被開方數從右向左每隔2位用撇號分開;

從左邊第一段求得算數平方根的第一位數字;

從第一段減去這個第一位數字的平方,再把被開方數的第二段寫下來,作為第乙個餘數;

把所得的第一位數字乘以20,去除第乙個餘數,所得的商的整數部分作為試商(如果這個整數部分大於或等於10,就改用9左試商,如果第乙個餘數小於第一位數字乘以20的積,則得試商0);

把第一位數字的20倍加上試商的和,乘以這個試商,如果所得的積大於餘數時,就要把試商減1再試,直到積小於或等於餘數為止,這個試商就是算數平方根的第二位數字;

用同樣方法繼續求算數平方根的其他各位數字

HNOI2004 高精度開根

題目 洛谷p2293 bzoj1213。題目大意 給你 n,k n leq 10 k leq 50 求 lfloor sqrt k rfloor 解題思路 高精度 二分 快速冪。我壓了九位。這題真的卡的我喪心病狂啊!開始無腦高精度,後來t的不知道哪去了。首先高精度乘法中除法取模運算特別慢,要放在乘完...

高精度 大整數減法

求兩個大的正整數相減的差。共2行,第1行是被減數a,第2行是減數b a b 每個大整數不超過200位,不會有多餘的前導零。一行,即所求的差。本題考察的是高精度減法。我們可以模擬減法的豎式計算過程從而實現高精度的計算。和高精度加法一樣,也是使用字串來進行輸入 儲存。豎式計算時,也是低位對齊,從低位向高...

高精度 大整數加法

求兩個不超過200位的非負整數的和。有兩行,每行是乙個不超過200位的非負整數,可能有多餘的前導0。一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。22222222222222222222 33333333333333333333 本題考察的是高精度計算...