2012-04-14 32 views
1

我必须制作一个程序,它接收一个数字并输出它的平方根。例如 - 45 - >3√5。我做了一个程序,但它返回的数字与我放入的相同。帮助将不胜感激。 这里是我的代码 - >计算一个数字的平方根的程序。

#include<iostream> 
using namespace std; 


int squarerootfinder(int number, int divisor){ 
    if(divisor == 1){ 

      return 1; 
    } 
    else{ 

      if((number/(divisor * divisor))% 1 != 0){ 

        divisor = squarerootfinder(number, divisor - 1); 

      } 
      if((number/ (divisor * divisor)) % 1 == 0){ 
      return divisor; 

      } 

     } 

} 
int main(){ 
    int number; 
    cout << "Enter a number to find the square root of it \n"; 
    cin >> number; 
    int divisor = number; 
    int squareroot; 
    squareroot = squarerootfinder(number, divisor); 
    cout << squareroot << endl; 
    return 0; 
} 
+0

您试图调试该问题的尝试是什么? – 2012-04-14 02:13:08

+0

嗯,我在过去的半个小时里一直在阅读它,但是我找不到错误在哪里。我想它的功能递归有问题。但我不太确定我应该做什么。 – 2012-04-14 02:15:01

+1

如果您有权访问调试器,则需要遍历程序的执行,观察执行流程以及该流程中关键点的变量状态。否则,打印到控制台或日志文件来完成相同的事情。 – 2012-04-14 02:16:40

回答

2

两个问题,此行既关系到整数类型:

if((number/(divisor * divisor))% 1 != 0){

记住,整数运算的结果是一个整数,什么是进入函数的第一组值的值?假设number为5。然后我们有:

5/(5*5) = 5/25 = 0

同样的道理也适用与% 1。整数总是整数,所以1修改总是返回0.

+1

而是,模1总是返回零。它不做*没有*,它*没有用处*。 – 2012-04-14 04:15:25

+0

@BenVoigt true。它没有什么用处。 – mydogisbox 2012-04-14 05:16:18

-2

这里的问题是使用正确的算法,那就是你需要在你的squareRootFinder函数中使用std库中的cmath头文件。你也可以使用一个函数来获得你的整数。这是我的代码。希望能帮助到你。

#include <iostream> 
#include <cstring> 
#include <cmath> 


using namespace std; 

int getPositiveInt(string rqstNum) 
    { 
     int num; 
     do 
     { 
      cout << rqstNum << endl; 
      cin >> num; 
     }while(num == 0); 

     return num; 
    } 


double squareRootFinder(double Num) 
    { 
     double squareroot; 
     squareroot = sqrt(Num); 
     return squareroot; 
    } 

int main() 
{ 
int Num = getPositiveInt("Enter a number and i'll calculate the squareroot "); 
double squareroot = squareRootFinder(Num); 

    // To dispay the answer to two decimal places we cast the squareroot variable 
    squareroot *= 100; 
    squareroot = (double)((int)squareroot); 
    squareroot /= 100; 
    cout << squareroot << endl; 

    return 0; 
} 
+0

您在介绍性段落中提到的内容比您提到的要多。 – 2013-05-31 13:08:03