二分法
#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 本題考察的是高精度計算...