题目如下:判断一个自然数是否是某个数的平方
解题思路:
(1)假设这个自然数为K,如果K等于0或者1,则输出true;如果K大于1,定义一个初始值temp,值为2,考虑下面四种情况:(a)如果temp*temp == K,输出true;(b)如果temp*temp < K,temp *= 2;(c)如果temp*temp > temp/2 + 1,则temp = (temp + temp/2) / 2;(d)其他情况输出false。代码如下:
bool isSqrt1(int num){
int remaider = 0; //用于保存temp/2 后的值
if (num < 0){
return false;
}
else if (num == 0 || num == 1){
return true;
}
else {
int temp = 2;
while (true){
if (temp * temp == num){
return true;
}
else if (temp * temp < num){
remainder = temp;
temp = 2 * remainder;
}
else if (temp > remainder + 1){
temp = (temp + temp/2)/2;
}
else{
return false;
}
}
}
}
(2)1 * 1 = 1;
2 * 2 = 1 + 3;
3 * 3 = 1 + 3 + 5;
4 * 4 = 1 + 3 + 5 + 7;
... ...
n * n = 1 + 3 + 5 + ... + (2 * n - 1);
根据这个思路,让num减去substractor,开始设置substractor为1,如果减数运算符发生后的结果大于0,则让substractor + 2,继续运行减法运算符;如果结果为0,则输出true;如果结果小于0,则输出false。代码如下:
bool isSqrt2(int num){
int first = 1;
num -= first;
while (num > 0){
first += 2;
num -= first;
}
if (num == 0){
return true;
}
else {
return false;
}
}