pri*_*kar 6 c# overflow biginteger modulo
如何处理C#中的大整数?
我有一个函数,它会给我除数的乘积:
private static int GetDivisorProduct(int N, int product)
{
for (int i = 1; i < N; i++)
{
if (N % i == 0)
{
Console.WriteLine(i.ToString());
product *= i;
}
}
return product;
}
Run Code Online (Sandbox Code Playgroud)
调用函数是 GetDivisorProduct(N, 1)
如果结果大于4位,我应该只获得最后4位数.(例如,如果我输入957,则仅在修剪掉最后四个值后输出为7493.实际结果为876467493.).
其他样本输入:如果我给10000,则输出为0.
该BigInteger类别已经从C#库中删除!
我怎样才能得到最后四位数字?
Rob*_*ino 27
如果您只查看最后四位数,则不需要任何大于整数的数字.考虑一下:
当两个数相乘,如果你只在最显著位(即最后四位数字)感兴趣的话,那么最上面的数字将不会有效果对结果的最低位...所以你可以只是" 扔出去 " 乘以之前的最重要(右侧)数字.
例如:我想将两个大数相乘但我只需要最后两位数:
int num1 = 123456789;
int num2 = 987654321;
int result = num1 * num2; // Last two digits would be "69" but this OVERFLOWS
Run Code Online (Sandbox Code Playgroud)
但如果我们只乘以最后两位数......
int result = (num1 % 100) * (num2 % 100); // result = 89 * 21
Run Code Online (Sandbox Code Playgroud)
89*21 = 1869(最后两位仍为" 69 ",但我们没有溢出).
我使用这种技术来计算1,000,000阶乘的六个最右边的数字.
请享用,
Robert C. Cartaino