C#char计算问题

C#char计算问题,第1张

概述我试图做一个排列.在这种情况下五个,所以5,4,3,2,1.最终我希望它可以存储多达100个,可以存储在我的i​​ntX类中.计算很好,但我想使用下面的脚本添加输出的所有单个数字. 所以5! = 5x4x3x2x1 = 120 —-> 1 2 0 = 3.但我的下面的脚本给出了输出147: 120120147 我究竟做错了什么?我已经尝试了所有转换器,我开始只使用字符串[指针]东西,我尝试 我试图做一个排列.在这种情况下五个,所以5,4,3,2,1.最终我希望它可以存储多达100个,可以存储在我的i​​ntX类中.计算很好,但我想使用下面的脚本添加输出的所有单个数字.

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

120120147

我究竟做错了什么?我已经尝试了所有转换器,我开始只使用字符串[指针]东西,我尝试了不同的数组等…但它一直在提出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的int表示为49,因此它被转换为(因为这只是尝试进行类型转换而不是任何类型的处理)

同样地,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]);    }

您也可以像其他人建议的那样减去字符.这是有效的,因为ascii值为1比ascii值高1,2为2,等等.

当然这仅适用于单位数字符号.如果你想从一个字符串中将两个以上的数字转换成int,你需要int.parse.

值得我怀疑的是,字符减法方法是最有效的,因为它实际上只是做了一些非常简单的类型转换和减法.解析方法可能会做更多的东西,所以更重量级.我不会’你会注意到性能差异.

总结

以上是内存溢出为你收集整理的C#char计算问题全部内容,希望文章能够帮你解决C#char计算问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存