如何乘以10 ^ 18

时间:2015-08-02 15:01:33

标签: c++ algorithm

我的代码包含

之类的语句
ans =((ans % mod)*(n % mod)) % mod;

 inverse= findMMI_fermat(n,mod);
 ans =((ans % mod)*(inverse % mod)) % mod;

findMMI_fermat定义为:

 ull fast_pow(ull base,ull n,ull M) //ull is unsigned long long
 {
     if(n==0)
        return 1;
     if(n==1)
        return base;
     ull halfn=fast_pow(base,n/2,M);
     if(n%2==0)
        return ( halfn * halfn ) % M;
     else
        return ( ( ( halfn * halfn ) % M ) * base ) % M;
 }

 ull findMMI_fermat(ull n,ull M)
 {
    return fast_pow(n,M-2,M);
 }

所有变量都声明为unsigned long long。该程序运行正常,直到ans,mod和n的大小都增长到10 ^ 18的数量级。我知道我不能直接乘以这么大的数字,我知道将整数转换为字符串然后乘以它们的方法。但还有其他更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

不,没有。另一种方法也需要工作。但是,不使用字符串。它使用字节数组或整数数组或long long。

但是,它完全符合字符串的工作原理。

语言,因为Java有一个内置的大数字库。我不记得这样的c ++库。