关于精度,模运算和高精的问题//19/07/14

Q1:小数输出时,如果要求不四舍五入?

A1:有个好玩的STL叫 sprintf ,能让你把你的数字就像在屏幕上输出一样,输出到一个字符串里

使用格式为sprintf(目标字符串,"输出形式",原数组)

使用样例

    sprintf(ans+1,"%.3lf",l);
    ans[strlen(ans+1)] = '\n';
    printf("%s",ans+1);

这样就可以快乐输出了

 

Q2:为什么模数才10007快速幂int就爆了?

A2:快速幂的底数完全可以比你的模数大,轻轻松松爆int,所以在快速幂关键位置要用longlong

虚假的快速幂

int qp(int a,int x) {
    int ret = 1;
    while(x){
        if(x&1){
            ret *= a;
            ret %= MOD;
        }
        a*=a;
        a%=MOD;
        x>>=1;
    }
    return ret;
}

真正的快速幂

int qp(long long a,int x) {
    long long ret = 1;
    while(x){
        if(x&1){
            ret *= a;
            ret %= MOD;
        }
        a*=a;
        a%=MOD;
        x>>=1;
    }
    return ret;
}

Q3:高精好难背啊真的不想写

A3:高精代码不需要背,清楚自己要维护len和a的正确和规范性就可以了,毒瘤的方面他也不会考

 

posted @ 2019-07-11 10:38  SIN_XIII  阅读(92)  评论(0编辑  收藏  举报