Problem Solving: Integer Roots

Learn to write a program that finds the square root of a number.

Integer square root

We want to make a program that takes inputs until the user enters -1 and tells whether the number is a perfect square. If yes, of which number (make a separate function to return this number). If not, it should print its integer square root.

Sample input

25 8 -1

Sample output

25 is a perfect square of 5
8 is not a perfect square. Its integer square-root is 2

Have you noticed that 25 is a perfect square of 5? For example, 5x5 is equal to 25 and if we take the square root of 25, it will return 5.

Let’s make another function called integerSquareRoot() that returns the square root of an integer.

We can simply modify the following function which we discovered in the last lesson, bool isPerfectSquare(int num).

Press + to interact
bool isPerfectSquare(int n)
{
for(int s = 0; s*s <= n ; s++)
{
if(s*s==n)
{
return true;
}
}
return false;
}

We can simply modify the above functions to find the integer square root.

Press + to interact
int integerSquareRoot(int n)
{
for(int s=0;s*s <= n;s++) // the loop will end with the first s having property s*s>n.
{
// This loop will end when s is one greater than the integer square root of N.
}
return s-1; // as s*s>n: hence s-1 will be either perfect square root or integer part of the square root.
}

Let us write the complete code below and experiment in the coding playground.

#include <iostream>
using namespace std;
//this function tells us that either the number is perfect square or not.
bool isPerfectSquare(int);
/*this function tells us that the number is perfect square
or which of the closest number.*/
int integerSquareRoot(int);
int main()
{
    int num=0;
    cout << "Enter Stream (for finding its square-root, ending with -1)  : ";
    cin>>num;
    for(int cnt=0;num!=-1;cnt++)
    {
        if(isPerfectSquare(num))
        {
            cout<<" The number is a perfect square of : "
                        <<integerSquareRoot(num)<<" .\n";
        }
        else
        {
            cout<<" The number is not a perfect square. It’s integer square root of : "
                        <<integerSquareRoot(num)<<" .\n";
        }
        
        cin>>num;
    }
    return 0;
}
bool isPerfectSquare(int n)
{
    for(int s = 0; s*s  <= n ; s++)
    {
        if(s*s==n)
        {
            return true;
        }
    }
    return false;
}
int integerSquareRoot(int n)
{
    int s;
    for(s=0; s*s  <= n;s++)
    {       
        // This loop will end when s will be one greater than integer square root of N.
    }
    return s-1;   
}





The perfect square and integer square root
  • In line 15, we have checked whether the num is a perfect square or not.
  • In lines 18 and 23, we are printing the square root of the number by calling the integerSquareroot() function.

Exercise 1: Finding the integer cube root

Modify the above program to report the integer cube root of a positive integer.

Sample program

Input Stream: 27 64 126 217 -1

27 is a perfect cube, having a cube root of 3
64 is a perfect cube, having a cube root of 4
126 is not a perfect cube, its approximate integer cube root is 5.
217 is not a perfect cube, its approximate integer cube root is 6.

#include <iostream>
using namespace std;
//this function tells us that either the number is perfect square or not.
bool isPerfectCube(int);
/*this function tells us that the number is perfect square
or which of the closest number.*/
int integerCubeRoot(int n);
int main()
{
    int num=0;
    cout << "Enter Stream (for finding its square-root, ending with -1)  : ";
    cin>>num;
    for(int cnt=0;num!=-1;cnt++)
    {
        if(isPerfectCube(num))
        {
            cout<<" The number is a perfect cube of : "
                        <<integerCubeRoot(num)<<" .\n";
        }
        else
        {
            cout<<" The number is not a perfect cube. It’s integer approximate cube root of : "
                        <<integerCubeRoot(num)<<" .\n";
        }
        
        cin>>num;
    }
    return 0;
}
bool isPerfectCube(int n)
{
    // Write code here
}
int integerCubeRoot(int n)
{
    // Write code here  
}





The perfect cube and integer cube root

Exercise 2: Finding the integer Kth root

Modify the above program to report the K’th cube root of a positive integer.

Here is a sample program

Input Stream: 81 16 126 317 -1
K: 4

81 is a perfect 4'th power, of 3
16 is a perfect 4'th power, of 2
126 is not a perfect 4'th power, its integer approximate is 3.
317 is not a perfect 4'th power, its integer approximate is 4.

Instruction: Add the following functions in the above playground.

int Power(int a, int k);
bool isPerfectKthPower(int n, int K);
int integerKthRoot(int n);