• 高精度计算


    高精度加法

      

    //简单高精度加法 不考虑符号
    const
    int N=100; int len,a[N+1],b[N+1]; void Init(int a[]) { string s; cin>>s,a[0]=s.size(); FORa(i,1,a[0]) a[i]=s[a[0]-i]-'0'; //逆序储存 } void Solve() { len=a[0]>b[0]?a[0]:b[0],len++; //注意答案的位数 FORa(i,1,len) { a[i]+=b[i]; if(a[i]>=0) a[i+1]+=a[i]/10,a[i]%=10;//最好不要这样写(a[i+1]+=a[i]/10,a[i]%=10),这样会无形增加时间复杂度 } while(!a[len]&&len>1) len--; //以防输出无答案 FORs(i,len,1) printf("%d",a[i]);//因为储存的问题,逆序输出 } int main() { Init(a),Init(b),Solve(); return 0; }

    高精度减法

    const int N=100;
    int len,a[N+1],b[N+1];
    void Init(int a[])
    {
        string s;
        cin>>s,a[0]=s.size();
        FORa(i,1,a[0]) a[i]=s[a[0]-i]-'0';
    }
    void Solve()
    {
        len=a[0];
        FORs(i,a[0],1) 
        {
            a[i]-=b[i];
            if(a[i]<0) a[i+1]--,a[i]+=10;        
        }
        while(!a[len]&&len>1) len--;
        FORs(i,len,1) printf("%d",a[i]);
    }
    int main()
    {
        Init(a),Init(b),Solve(); 
        return 0;
    }

    高精度乘法

    const int N=100;
    int len,a[N+1],b[N+1],c[2*N+2];
    void Init(int a[])
    {
        string s;
        cin>>s,a[0]=s.size();
        FORa(i,1,a[0]) a[i]=s[a[0]-i]-'0';
    }
    void Solve()
    {
        len=a[0]+b[0]+1;
        FORa(i,1,a[0])
            FORa(j,1,b[0])
                c[i+j-1]+=a[i]*b[j]; //在科学文社出版社出版的信息学奥赛一本通中(新手推荐),简单高精好像有一点问题。
        FORa(i,1,len) if(c[i]>=10) c[i+1]+=c[i]/10,c[i]%=10; //先处理,后进位
        while(!c[len]&&len>1) len--;
        FORs(i,len,1) printf("%d",c[i]);
    }
    int main()
    {
        Init(a),Init(b),Solve(); 
        return 0;
    }

    高精度除法

    const int N=100;
    int len,a[N+1],c[N+1],b;
    void Init(int a[])
    {
        string s;
        cin>>s,a[0]=s.size();
        FORa(i,1,a[0]) a[i]=s[a[0]-i]-'0';
    }
    void Solve()
    {
        int x=0,len=a[0];
        FORs(i,a[0],1) x=(x*10+a[i]),c[i]=x/b,x%=b; //注意解决方式与加减乘不同,需要从头开始,
        while(!c[len]&&len>1) len--;
        FORs(i,len,1) printf("%d",c[i]);
        printf("
    %d",x);
    }
    int main()
    {
        Init(a),scanf("%d",&b),Solve(); 
        return 0;
    }
  • 相关阅读:
    Spark笔记:RDD基本操作(下)
    Spark笔记:RDD基本操作(上)
    使用mapreduce计算环比的实例
    Hbase学习笔记01
    周爱民:真正的架构师是没有title的(图灵访谈)
    google map 路线服务
    Google Maps V3 之 路线服务
    CSS3支持box-flex弹性布局
    php curl用法
    .frm,.myd,myi转换为.sql导入数据库
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/10882768.html
Copyright © 2020-2023  润新知