我无法摆脱System.Range.get_Start错误

时间:2019-07-13 12:44:41

标签: c# compiler-errors system

我想创建一个控制奇数的布尔值,但是当我用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;
}

2 个答案:

答案 0 :(得分:0)

将循环更改为以下内容:

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

答案 1 :(得分:0)

在其他答案中提到的一个问题是您的for循环。您正在尝试使用不支持的string值(long)为numS[i]编制索引。仅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常数表示)。包括一个无符号的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,因此从字符0中减去48将得到数字0。