2010-04-03 65 views
0

在我的應用程序中,「cool」數字是既是正方形又是立方體的數字,例如:64 = 8^2和64 = 4^3。我的應用程序應該在用戶給出的範圍內找到「很酷的數字」的數量。我寫了我的代碼,應用程序運行正常,但它給了我錯誤的答案。你能幫我一下嗎?例如:C#:找到「很酷」數字時的錯誤答案

INPUT

OUTPUT

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      double a = Convert.ToDouble(Console.ReadLine()); // first number in the range 
      double b = Convert.ToDouble(Console.ReadLine()); // second number in the range 
      long x = 0; 
      for (double i = a; i <= b; i++) 
      { 

        double cube = 1.0/3.0; 
        double cuad = 1.0/2.0; 
        double crt = Math.Pow(i, cube); // cube root 
        double sqrt = Math.Pow(i, cuad); // square root 


       if ((crt * 10) % 10 == 0 || (sqrt * 10) % 10 == 0) // condition to determine if it is a cool number. 
        x++; 

      } 
      Console.WriteLine(x); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

這個例子說明了它的意義是什麼,而不是我得到的錯誤答案。 – user300484 2010-04-03 02:17:13

+0

有沒有機會做這個功課? – 2010-04-03 02:17:55

+3

調試它並自行執行代碼,您會立即看到錯誤。 – 2010-04-03 02:18:14

回答

0

的||如果其中一個部分是真的,則操作符的計算結果爲true,因此,如果((crt * 10)%10 == 0 & & &(sqrt * 10)% 10 == 0)

這是另一種選擇,慢了一點,但你可以測試一下:

if (((crt == Math.Floor(crt)) && (sqrt == Math.Floor(sqrt))) x++; 
3

double s爲大多數語言混亂。他們經常得到不準確的存儲,有時會給你錯誤的答案。當你不需要時,你不想使用它們。

下面是我該怎麼做。從用戶處取兩個int。循環遍歷這兩個範圍內的整數(例如,你正在使用浮點數)。對於每一個,找到立方體根和平方根,並將它們存儲在雙精度數組中。然後將立方根和平方根四捨五入到最接近的整數(使用庫函數)並將它們存儲爲int s。最後,要查看當前的數字是正方形還是立方體,請自行乘以自己的平方根int和自身的立方體根int,然後查看這兩個產品是否等於原始數字。如果他們這樣做,你有一個很酷的號碼。

這樣,舍入函數肯定會篩選出雙精度中的任何精度錯誤,然後所有的數字都很好聽。

一些代碼:

int a = int_from_user(); 
int b = int_from_user(); 

for (i = a; i <= b; i++) { 
    int sqrt = round(sqrt(i)); 
    int cbrt = round(cbrt(i)); 

    if (sqrt * sqrt == i && cbrt * cbrt * cbrt == i) { 
    cool++; 
    } 
} 
11

「清涼號」是描述第六權力的一個相當迂迴的方式。顯然,每六分之一的力量是一個很酷的數字; x^6是(x^2)^ 3和(x^3)^ 2。而每一個不是第六力量的數字都不是一個很酷的數字。 (提示:考慮冷卻數的任何素數因子分解的必要屬性)

因此,我只是簡單地寫一個枚舉在一個範圍內的第六個冪的設備。

+0

或者簡單地採取第六個權力根,並向下取整。 – Thomas 2010-04-03 15:14:21