我想创建一个控制奇数的布尔值,但是当我用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;
}
答案 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
遍历num
或numS
的所有数字。
此外,您可以按以下方式重写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。