var digitToSubstitute = 5; var targetNumber = 999999999; var expectedOutput = 995999999;
如何替换int32中的第n位数字而不将其转换为字符串?虽然这是一个小示例,但在实际应用程序中,我会在一个紧密的循环中使用它(创建所有可能的数字组合并检查现有的组合),因此我希望避免创建字符串。
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
注意:对负数无效。
1条答案
按热度按时间c3frrgcw1#
你可以这样做。不知道和字符串操作相比它的性能如何。
注意:对负数无效。