You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

字符转整数取值错误:数字拆分求和结果异常问题求助

数字拆分求和错误: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

火山引擎 最新活动