2012-04-14 36 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