在我的应用程序中,“酷”号是一个正方形和一个立方体的数字,例如: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();
}
}
}
答案 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++;