Description
给你一个非负整数,计算并返回的算术平方根.
返回结果只保留整数部分,舍去小数部分.
注意:不允许使用任何内置指数函数和算符,例如pow(,0.5)或者 sqrt(x),否则判0分.
Input
包含n组数据,每组数据一行.
0≤n≤10000
O≤X≤263-1
注意:由于x超出了in类型的数据范围,应使用longlong类型
下面这个应该怎么改成long long呀
#include
using namespace std;
int sqrt(int x) {//设计函数
if (x == 0) {
return 0;//x=0的情况
}
for (int i = 0; i <= x; i++) {
if (i * i == x) {//i的平方为x则返回i
return i;
}
else if (i * i
return i;
}
}
}
int main() {
int x;
while (cin >> x) {//多组输入
cout << sqrt(x) << endl;//调用函数并输出
}
}
我给写代码了啊,看你上一个问题。不能从1开始循环,效率太低,会超时。用二分法,速度很快
应该是边界值的问题 要求里不是已经提到 让你用long long 确定要求中测试边界。
第一:题目不是说输入的是一组数据,每组数据一批数据,这个你没实现啊???
第二:long long 和int 一样,把int变成long long 就够了。
用迭代算法计算平方根,迭代公式(参考https://en.wikipedia.org/wiki/Square_root#Computation
#include <iostream>
unsigned long long my_sqrt(unsigned long long x) {
if (x == 0)
return 0;
if (x == 1)
return 1;
unsigned long long x_n = x / 2;
while (1) {
unsigned long long x_n1 = (x_n + x / x_n) / 2;
if (x_n1 >= x_n)
break;
x_n = x_n1;
}
return x_n;
}
int main() {
unsigned long long x;
while (std::cin >> x)
std::cout << my_sqrt(x) << '\n';
return 0;
}