programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Liutauras Vilda
• Campbell Ritchie
• Tim Cooke
• Bear Bibeault
• Devaka Cooray
Sheriffs:
• Jeanne Boyarsky
• Knute Snortum
• Junilu Lacar
Saloon Keepers:
• Tim Moores
• Ganesh Patekar
• Stephan van Hulst
• Pete Letkeman
• Carey Brown
Bartenders:
• Tim Holloway
• Ron McLeod
• Vijitha Kumara

# Take numeric input and give the very next number which is a perfect square.

Ranch Hand
Posts: 174
2
The problem I am trying to solve is this:

When the user provides a whole number, the program returns the next whole number which is a perfect square.

For example, if I provide 5, then the program will check if 6, or 7, or 8, or 9 are perfect squares. It will detect 9 as being a perfect square and tell you that 3 times 3 is 9.

My pseudo-code is as follows:

1. take input as variable "n" of type int.
2. create a for loop which starts at 1 and runs till i = n.
3. the body of the for loop will calculate n/i and compare it with i for equality.

e.g. If the user passes 9, then the first iteration will be as follows:

9/1 = 9 (false)

second iteration:

9/2 = 4.5 (false)

third iteration:

9/3 = 3 (true, because i equals n)

4. The program will stop and tell us that "i" times "i" equals "n"
In this case, 3 times 3 equals 9

I wrote the following code, but I know that I have to account for modulus and probably use a float or double. I'm also not sure if my i == n should be i < n, instead.
Needless to say, my program does not work and I'm missing a few things

Saloon Keeper
Posts: 4777
52

If you want a brute force algorithm:
• as long as i * i <= n increment i
• answer is i * i

• This works but would be very slow for large values of n.

A simpler algorithm that involves floating point:
• i = square root of n truncated to an integer
• increment i
• answer = i * i

•
Ranch Hand
Posts: 70
Also, you can see this approach, but it's not a ready decision:

Carey Brown
Saloon Keeper
Posts: 4777
52

Vasyl Lyashkevych wrote:Also, you can see this approach, but it's not a ready decision:

Have you actually run this code with n=9 or n=5?

Vasyl Lyashkevych
Ranch Hand
Posts: 70
I already posted executed code, but we need to help. So, I pointed to that approaches, but didn't tested

Carey Brown
Saloon Keeper
Posts: 4777
52

Vasyl Lyashkevych wrote:I already posted executed code, but we need to help. So, I pointed to that approaches, but didn't tested

Sorry, your code doesn't work. If n=9 then it goes into an infinite (mostly) loop. If n=5 then your code yields: 2 times 2 equals 6 (the answer is supposed to be 9). The very first time through i=1 then for all other iterations i will equal 2 and never anything more.