You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#伪二进制转换代码功能异常求助:数字字符串转0/1字符串逻辑实现问题

问题排查与修复

嘿,我帮你找出这段C#代码里的几个关键问题,咱们一步步拆解:

1. 循环完全没执行!

你写的for循环初始条件和判断逻辑根本不对:

for (int i = digitsArray.Length; i < digitsArray.Length; i++)

i一开始就等于数组的长度,而循环要求i < digitsArray.Length——这就导致循环体一次都不会运行,最后直接返回空字符串,这是最核心的问题。

2. 数字顺序搞反了

就算循环能跑,你通过%10和/10取数字的方式,得到的是原字符串的逆序数字。比如输入"12345",你会先拿到5,再拿到4,最后拿到1,拼接出来的结果完全是倒过来的。

3. 漏掉了等于5的情况

题目要求大于等于5替换成'1',但你的判断是if (currentDigit > 5),等于5的数字不会被替换成1,不符合需求。

4. 存在整数溢出风险

用int.Parse(number)把字符串转成int,如果输入的数字太长(比如超过10位,int最大值是2147483647),会直接抛出溢出异常,完全没必要做这个转换。


修正后的代码

其实根本不需要把字符串转成整数,直接遍历每个字符就好,既安全又高效:

static string FakeBinary(string number) {
    // 用StringBuilder比直接拼接字符串性能更好,尤其是长字符串
    StringBuilder output = new StringBuilder();
    foreach (char c in number) {
        // 字符转数字:利用ASCII值差,'0'的ASCII是48,所以c-'0'就能得到对应的数字
        int digit = c - '0';
        output.Append(digit >= 5 ? '1' : '0');
    }
    return output.ToString();
}

如果你更喜欢用数组和for循环的写法,也可以这样:

static string FakeBinary(string number) {
    char[] resultChars = new char[number.Length];
    for (int i = 0; i < number.Length; i++) {
        int digit = number[i] - '0';
        resultChars[i] = digit >= 5 ? '1' : '0';
    }
    return new string(resultChars);
}

为什么这样改?
  • 直接遍历字符:避免了整数转换的溢出问题,同时完美保留原字符串的顺序。
  • StringBuilder:字符串是C#里的不可变类型,每次用+=拼接都会创建新对象,用StringBuilder能大幅提升长字符串场景下的性能。
  • 修正判断逻辑:包含了等于5的情况,完全符合题目要求。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:37:48