有没有办法围绕BigInteger?

时间:2015-12-09 01:44:50

标签: c#

我有一个BigIntiger,比如1234567890,我正在寻找最快的方法将其转变成以下类似的东西:

  • 20亿
  • 13亿
  • 1234567900

2 个答案:

答案 0 :(得分:2)

我认为没有内置的方式。

获得"没有剩余的最简单方法"只是通过余数减少值:

"圆角"不给13的剩余部分:

  var x = new BigInteger(123456);
  var roundedTo13 = x - (x % 13);

或100:

  var roundedTo100 = x - (x % 100);
  Console.WriteLine(roundedTo100);

如果你需要更传统意义上的舍入 - 检查余数是否大于你想要舍入的值和你要舍入的数字的符号。如果余数(x%100)的值大于一半,则需要添加/减去100。

答案 1 :(得分:0)

另一种方法是拆分字符串。虽然可能存在性能问题,但结果还可以。

    //n=1, 2, 8 to check for your example
    static long F(long num, int n)
    {
        string all = num.ToString();
        long headn = Convert.ToInt64(all.Substring(0, n)) + 1;
        return (long)(headn * Math.Pow(10, all.Length - n));
    }