(下文 ← 代表赋值)
穷举法:
算法步骤:
① i ←1
② i*i==1 是否成立:若是,i为结果,算法结束。
③ i*i>1 是否成立:若是,i-1为结果,算法结束。
③ i ← i+1, 转到第②步执行。
c实现
#include <stdio.h>
int xxqz_sqrt(int n)
{
int i=1;
l: if(i*i==n)
return i;
if(i*i>n)
return i-1;
i=i+1;
goto l;
}
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("%d的平方根向下取整是:%d\n", n, xxqz_sqrt(n));
return 0;
}
二分法:
算法步骤:
① left ← 1, right ← n
② (right-left)<=1是否成立: 若是left为结果,算法结束。
③ mid ← (left+right)/2
⑤ mid*mid < n 是否成立:若是,left ←mid, 转到第②步执行。
⑥ mid*mid > n 是否成立:若是,right ←mid, 转到第②步执行。
⑦ mid为结果,算法结束。
c实现:
#include <stdio.h>
int xxqz_sqrt(int n)
{
int left = 1, right = n;int mid;
l: if(right-left<=1)
return left;
mid = (left + right)/2;
if(mid*mid > n)
{
right=mid; goto l;
}
if(mid*mid < n)
{
left=mid; goto l;
}
return mid;
}
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("%d的平方根向下取整是:%d\n", n, xxqz_sqrt(n));
return 0;
}