C#:找到“酷”数字时答案错误

时间:2010-04-03 02:15:40

标签: c#

在我的应用程序中,“酷”号是一个正方形和一个立方体的数字,例如:64 = 8 ^ 2和64 = 4 ^ 3。我的应用程序应该在用户给出的范围之间找到“酷数”的数量。我写了我的代码,应用程序运行正常,但它给了我错误的答案。你能来帮我吗?例如:

INPUT

1 100

输出

1

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();
        }
    }
}

3 个答案:

答案 0 :(得分:11)

“酷数字”是描述第六种力量的相当迂​​回的方式。显然,每六个功率都很酷; x ^ 6是(x ^ 2)^ 3和(x ^ 3)^ 2。每一个不是第六种力量的数字都不是很酷的数字。 (证明留作练习。提示:考虑一个很酷的数字的任何素数因子化的必要属性。)

因此,我只想编写一个枚举范围内第六个幂的设备。

答案 1 :(得分:3)

在大多数语言中,

double都很混乱。它们经常被不精确地存储,有时会给你错误的答案。当你不需要时,你不想使用它们。

这是我将如何做到的。从用户那里拿两个int。循环遍历这两个int s范围内的整数(就像你使用浮点数一样。)对于每一个,找到立方根和平方根并将它们存储在双精度数中。然后将立方根和平方根舍入到最接近的整数(使用库函数)并将它们存储为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++;
  }
}

答案 2 :(得分:0)

||如果其中一个部分为真,则运算符意味着求值为true,因此无论是精确立方体还是精确平方,您的条件都将评估为真      if((crt * 10)%10 == 0&amp;&amp;(sqrt * 10)%10 == 0)

这是另一种选择,有点慢但你可以测试它:

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