2010-04-03 66 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