C# 有没有一种方法可以取整或分割BigInteger?

C# 有没有一种方法可以取整或分割BigInteger?,c#,C#,我有一个更大的问题,比如说1234567890,我正在寻找最快的方法,将其转化为以下内容之一: 二十亿 13亿 1234567900 我认为这样做没有内在的方式 获得“无余数”的最简单方法是将值减去余数: “四舍五入”不给出13的余数: var x = new BigInteger(123456); var roundedTo13 = x - (x % 13); 或100: var roundedTo100 = x - (x % 100); Console.WriteLine

我有一个更大的问题,比如说1234567890,我正在寻找最快的方法,将其转化为以下内容之一:

  • 二十亿
  • 13亿
  • 1234567900

我认为这样做没有内在的方式

获得“无余数”的最简单方法是将值减去余数:

“四舍五入”不给出13的余数:

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

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

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

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

    //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));
    }

每个输入有3个输出?任何一个都可以接受。我只是想把这个数字四舍五入,所以当我把它除以其他数字时,就没有余数了。如果这就是你想要的,那么解决方案看起来很清楚。要么(1)除以该数字,然后再乘以该数字,要么(2)找到余数并减去它。我还注意到,您并不是在寻找最快的方法,因为您可能不愿意花费数百万美元在定制硬件上,以皮秒而不是纳秒的时间来解决这个问题。在给定一定预算的情况下,您正在寻找一个可以接受的快速解决方案,就像我们大家一样。对我来说,尽可能快。你的解决方案很明显,现在我来看看。谢谢