字符转整数取值错误:数字拆分求和结果异常问题求助
数字拆分求和错误:ASCII码值导致的问题与修复
嘿,我一眼就看出问题啦!你代码里拿到的50和57其实是字符'2'和'9'的ASCII码值,不是数字本身。当你直接把char类型的a[i]加到total里时,程序会自动把字符转换成它对应的ASCII数值,'2'对应50,'9'对应57,加起来当然是107咯。
问题根源
你把数字转成字符串再拆成字符数组的思路是对的,但忽略了一个关键点:char类型存储的是字符的编码值,不是我们直观看到的数字。比如字符'0'的ASCII码是48,'1'是49,以此类推,所以'2'就是50,'9'是57。
修复方案
这里给你三种可行的修复方法,按需选择:
方法1:使用Char.GetNumericValue()转换字符到数字
这个方法最直观,专门用来获取字符对应的数值:
class Program { static void Main(string[] args) { int a = 29; int answer = addTwoDigits(a); Console.WriteLine(answer); // 现在会输出11啦 Console.ReadLine(); } public static int addTwoDigits(int n) { string number = n.ToString(); char[] a = number.ToCharArray(); int total = 0; for (int i = 0; i < a.Length; i++) { total += (int)Char.GetNumericValue(a[i]); } return total; } }
方法2:利用字符ASCII码的连续性计算
因为数字字符'0'到'9'的ASCII码是连续的,用目标字符减去'0'就能得到对应的数字:
public static int addTwoDigits(int n) { string number = n.ToString(); char[] a = number.ToCharArray(); int total = 0; for (int i = 0; i < a.Length; i++) { total += a[i] - '0'; // '2'-'0'=2,'9'-'0'=9 } return total; }
方法3:纯数学运算拆分数字(无需字符串转换)
如果不想用字符串处理,直接用取模和除法拆分数字更高效,还支持任意位数的数字:
public static int addTwoDigits(int n) { int total = 0; while (n > 0) { total += n % 10; // 取最后一位数字 n = n / 10; // 移除最后一位 } return total; }
随便选一种替换你的代码,就能得到正确的11啦!
内容的提问来源于stack exchange,提问作者Ginkobaloba




