【问题标题】:C# For loop index returns ascii instead of current iterationC# For 循环索引返回 ascii 而不是当前迭代
【发布时间】:2020-01-23 05:53:56
【问题描述】:

我需要编写一个程序来计算一个数字的阶乘并对不同的数字求和。

我被困在我需要在 for 循环中取当前数字来做阶乘的点(例如数字 145,我不能取 5)。我尝试了以下方法:

for (int i = length-1; i >= 0; i--)
{
    int currentNumber = inputString[i];
    currentSum = currentSum * i;
    sum += currentSum;
}

inputString 是给定数字的长度。 问题是这样 currentNumber 变成 ascii 等价物(如果 i = 3 currentSum 变成 51)。如何使 currentSum 变为 3?

【问题讨论】:

  • int currentNumber = inputString[i] - '0';

标签: c# for-loop indexing iteration


【解决方案1】:

您也可以使用:

int currentNumber = int.Parse(inputString[i].ToString());

【讨论】:

  • int.Parse 只接受字符串值,不接受字符,这将导致编译错误,除非您将 .ToString() 添加到 inputString[i]
【解决方案2】:

我想提出一个替代方案:

int num = int.Parse(inputString); // Convert whole input to int
int sum = 0;

while( num != 0 ) // >0 is not enough, num could be negative.
{
    sum += num % 10;  // Sum up least significant place
    num = num / 10;   // "Decimal shift right"
}

对于您的示例“145”,这意味着:

迭代 1: 总和 += 145 % 10 => 总和 = 0 + 5 = 5 数 = 数 / 10 => 数 = 145 / 10 = 14 迭代 2: 总和 += 14 % 10 => 总和 = 5 + 4 = 9 数 = 数 / 10 => 数 = 14 / 10 = 1 迭代 3: 总和 += 1 % 10 => 总和 = 9 + 1 = 10 数 = 数 / 10 => 数 = 1 / 10 = 0 num == 0 => end while , sum = 10

免责声明:这假设输入实际上是一个有效的整数值。我强烈建议首先验证这一点。 “永远不要相信用户输入。”

【讨论】:

    【解决方案3】:

    假设 inputString 只是数字,你可以逃脱:

    int currentNumber = inputString[i] - '0';
    

    简要说明:数字'3'的字符表示是51,但它们是按顺序排列的(所以'0'是48,'1'是49等),你可以得到一个字符的“数值”通过删除偏移量(即“0”的值)。

    【讨论】:

    • 这就像一个魅力。我将使用这种方法,直到我的知识足以提出我自己的方法。谢谢!
    • +1 表示聪明且可读性强。我建议评论这段代码,并简要说明到底发生了什么,类似于// Converting char ASCII value to int value
    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2020-08-07
    • 2013-04-24
    相关资源
    最近更新 更多