C# char计算问题

标签 c#

我正在尝试进行排列。在这种情况下是五个,所以 5,4,3,2,1 。最终我希望它最多排列 100 个,可以存储在我的 intX 类中。计算没问题,但我想使用下面的脚本将输出的所有单个数字相加。

所以 5! = 5x4x3x2x1 = 120 ----> 1+2+0 = 3。但是我下面的脚本给出了输出 147:

120
1
2
0
147

我做错了什么?我已经尝试了所有的转换,我开始只是使用字符串 [指针] 东西,我尝试了不同的数组等。但它一直在出现 147。它是某种表示形式吗?

    static void Main(string[] args)
    {
        IntX total=1;
        IntX totalsum = 0;
        int perm = 5;
        for (int i = perm; i > 0; i--)
        {
            total = total * i;
        }
        Console.WriteLine(total);

        string answerstring = Convert.ToString(total);
        char[] answerArray = answerstring.ToArray();
        for (int x = 0; x < answerArray.Length; x++)
        {
            totalsum += Convert.ToInt32(answerArray[x]);
            Console.WriteLine(answerArray[x]);
        }
        Console.WriteLine(totalsum);
    }

最佳答案

问题在于您将 answerArray 元素转换回数字的方式

Convert.ToInt32(answerArray[x])

上面的行接受 char 1 并将其转换为 int。这与将其解析为 int 不同。 1 是 ascii 字符 49 所以在内部 char 有一个 49 的 int 表示,所以这就是它被转换成的(因为这只是试图进行类型转换而不是任何类型的处理)

同样地,2 = 50 和 0 = 48,所以你得到总数 147。

您要做的是使用 Integer.Parse 将字符串解析为数字。我相信它应该在解析之前将 char 隐式转换为字符串。

所以你的循环将是:

    for (int x = 0; x < answerArray.Length; x++)
    {
        totalsum += int.Parse(answerArray[x].ToString());
        Console.WriteLine(answerArray[x]);
    }

您也可以按照其他人建议的减去字符的方式进行操作。这是有效的,因为 1 的 ascii 值比 0 的 ascii 值高 1。2 高 2,等等。

当然这只适用于单个数字字符。如果您想将超过两位数的数字从字符串转换为 int,您将需要 int.parse

就其值(value)而言,我怀疑字符减法方法是最有效的,因为它实际上只是在执行一些非常简单的类型转换和减法。 parse 方法可能会做更多的事情,因此会更重量级。不过,我不认为您会注意到性能差异。

关于C# char计算问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861623/

相关文章:

c# - 当@Html.TextBoxFor被jQuery更新时如何刷新@Html.ValidationMessageFor?

c# - 根据 T 返回具有不同内容的 List<T>

c# - 如何使用 dbcontext SaveChanges 将修改的记录推送到数据库?

c# - 当 OnClick 代码在后台执行时禁用 Winforms 按钮

c# - 在 WPFToolkit 中更改点大小

c# - 排序 Gridview 不起作用

c# - 更改数组元素的 XML 序列化程序的元素名称

c# - JavaScript OnClientClick 破坏 RadGrid 插入/更新按钮在 Web 表单上提交行为

c# - 如何格式化交易ID?

c# - Nhibernate:一个实体类的多个类映射