zoukankan      html  css  js  c++  java
  • 高精度计算

    高精度加法

      

    //简单高精度加法 不考虑符号
    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;
    }
  • 相关阅读:
    HTML&CSS学习总结(一)
    PHP学习总结(一)
    二、python基础1 基本语法、流程控制
    MySQL练习题
    python自动化学习目录大全
    简单练习:Python三级菜单优化
    一、python语言简介
    网络编程与并发—批量主机管理开发
    windows安装nginx并存放静态资源
    集成xxl-job分布式任务调度平台
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/10882768.html
Copyright © 2011-2022 走看看