【計蒜客系列】挑戰難題17:x的平方根
阿新 • • 發佈:2019-02-10
設計函式int sqrt(int x),計算x的平方根。
格式:輸入一個數x,輸出它的平方根。直到碰到結束符號為止。
千萬注意:是int型別哦~
輸入可以如下操作:
while(cin>>x)
或者
while(scanf("%d", &x) != EOF)
樣例1
輸入:
1
2
3
4
5
6
7
8
9
輸出:
1
1
1
2
2
2
2
2
3
二分法:
#include<stdio.h> int sqrt(int x) { unsigned long long begin = 0; unsigned long long end = (x + 1) / 2; unsigned long long mid; unsigned long long tmp; while (begin < end) { mid = begin + (end - begin) / 2; tmp = mid * mid; if (tmp == x) return mid; else if (tmp < x) begin = mid + 1; else end = mid - 1; } tmp = end * end; if (tmp > x) return end - 1; else return end; } int main() { int x; int ans; while (scanf("%d", &x) != EOF) { ans = sqrt(x); printf("%d\n", ans); } }
牛頓迭代法
牛的迭代法可以解決問題,但是執行時間超時,AC不過。int sqrt2(int a) {//牛頓迭代法
if(a < 0.00001)
return 0;
float x = a / 2;
float t = a ;
while(abs(x - t) > 0.00001)
{
t = x;
x = (x + a/x)/2;
}
return (int)x;
}