【问题标题】:I could't get rid of System.Range.get_Start Error我无法摆脱 System.Range.get_Start 错误
【发布时间】:2019-07-13 12:44:41
【问题描述】:

我想创建一个控制奇怪数字的布尔值,但是当我用 long.Parse 方法填充“for”循环时,编译器给了我 System.Range.get_Start 错误。我怎样才能摆脱它?

static void Main(string[] args)
{
    //IsCuriousNum(300);
    Console.ReadKey();
}

static bool IsCuriousNum(long num)
{
    bool isCuriousNum = false;
    long sum = 0;

    string numS = num.ToString();

    for (long i = 0; i < numS.Length; i++)
    {
        char a = (char)long.Parse(numS[i]);
        sum += Factorial(a);
    }

    if (num == sum)
    {
        isCuriousNum = true;
    }

    Console.WriteLine(sum.ToString());

    return isCuriousNum;
}

static long Factorial(long num)
{
    long factorial = 1;

    for (long i = 1; i <= num; i++) factorial *= i;

    return factorial;
}

【问题讨论】:

  • 你为什么要投到char
  • 我不知道我只是想从数字中取一位数字,所以我认为这可能更有效。但是没有,我尝试了另一种方法并没有出现这个问题:(

标签: c# compiler-errors system


【解决方案1】:

在其他答案中提到,您的 for 循环是问题所在。您正在尝试使用不受支持的 long 值 (numS[i]) 来索引 string。仅在 int 数据类型上支持索引。编译器要求你提供一个索引实现 long -

for (long i = 0; i < numS.Length; i++)
{
    char a = (char)long.Parse(numS[i]);
    sum += Factorial(a);
}

正如您所说,num 的类型为 long,但是,num 的位数最多为 19。Int64

Int64 是一种不可变值类型,它表示有符号整数,其值的范围从负 9,223,372,036,854,775,808(由 Int64.MinValue 常量表示)到正 9,223,372,036,854,775,807(由 Int64.MaxValue 常量表示)。.NET Framework 还包括一个无符号的 64 位整数值类型 UInt64,它表示范围从 0 到 18,446,744,073,709,551,615 的值。

因此您可以安全地使用int 来遍历numnumS 的所有数字。

另外,你可以重写你的for循环如下 -

for (int i = 0; i < numS.Length; i++)
{
    var a = numS[i] - 48;
    //char a = (char)long.Parse(numS[i]);
    sum += Factorial(a);
}

由于0 的 ASCII 是 48,所以从 char 0 中减去 48 将得到数字 0。

【讨论】:

    【解决方案2】:

    将循环更改为以下内容:

    for (int i = 0; i < numS.Length; i++)
    {
        long a = long.Parse(numS[i].ToString());
        sum += Factorial(a);
    }
    

    【讨论】:

    • 还有一个问题。 Num 是长值,但我使用整数表示 i。我想这不是一个合适的解决方案。
    • i 仅用于索引。这个循环的作用是每次取一位数(从左到右),计算阶乘并将其添加到总和中。
    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多