.net 如何替换Int32中的数字而不将其转换为字符串?

ars1skjm  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(108)
var digitToSubstitute = 5;

var targetNumber   = 999999999;
var expectedOutput = 995999999;

如何替换int32中的第n位数字而不将其转换为字符串?
虽然这是一个小示例,但在实际应用程序中,我会在一个紧密的循环中使用它(创建所有可能的数字组合并检查现有的组合),因此我希望避免创建字符串。

c3frrgcw

c3frrgcw1#

你可以这样做。不知道和字符串操作相比它的性能如何。

int ReplaceNthDigit(int value, int digitPosition, int digitToReplace, bool fromLeft = false)
{
    if (fromLeft) {
        digitPosition = 1 + (int)Math.Ceiling(Math.Log10(value)) - digitPosition;
    }

    int divisor = (int)Math.Pow(10, digitPosition - 1);
    int quotient = value / divisor;
    int remainder = value % divisor;
    int digitAtPosition = quotient % 10;
    return (quotient - digitAtPosition + digitToReplace) * divisor + remainder;
}

Console.WriteLine(ReplaceNthDigit(999999999, 7, 5, fromLeft: true)); // 999999599
Console.WriteLine(ReplaceNthDigit(999999999, 7, 5, fromLeft: false)); // 995999999

注意:对负数无效。

相关问题