• 大数相加减以及相乘模板


    //无论开多大的数都可以,用的很爽;
    string sum(string s1,string s2)
    {
        if(s1.length()<s2.length())
        {
            string temp=s1;
            s1=s2;
            s2=temp;
        }
        int i,j;
        for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
        {
            s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));
            if(s1[i]-'0'>=10)
            {
                s1[i]=char((s1[i]-'0')%10+'0');
                if(i) s1[i-1]++;
                else s1='1'+s1;
            }
        }
        return s1;
    }
    string sub(string str1,string str2)//高精度减法
    {
        string str;
        int tmp=str1.length()-str2.length();
        int cf=0;
        for(int i=str2.length()-1;i>=0;i--)
        {
            if(str1[tmp+i]<str2[i]+cf)
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
                cf=1;
            }
            else
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
                cf=0;
            }
        }
        for(int i=tmp-1;i>=0;i--)
        {
            if(str1[i]-cf>='0')
            {
                str=char(str1[i]-cf)+str;
                cf=0;
            }
            else
            {
                str=char(str1[i]-cf+10)+str;
                cf=1;
            }
        }
        str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0
        return str;
    }
     

    相乘

    string mul(string str1,string str2)
    {
        string str(str1.size()+str2.size()+5,'0');
        reverse(str1.begin(),str1.end()); //翻转字符串str1
        reverse(str2.begin(),str2.end()); //翻转字符串str2
        int num=0,h=0;
        for(int i=0;i<str1.size();i++) //o(n^2)的方法模拟str1*str2(平时用的笔算乘法)
        {
            h=i;
            for(int j=0;j<str2.size();j++)
            {
                num+=str[h]-'0'+(str1[i]-'0')*(str2[j]-'0');
                str[h++]=num%10+'0';
                num/=10;
            }
            while(num)
            {
                str[h++]=num%10+'0';
                num/=10;
            }
        }
        for(int i=str1.size()+str2.size()+4;i>=0;i--) //去前导0
        {
            if(str[i]=='0')
               str.erase(i);
            else
               break;
        }
        reverse(str.begin(),str.end());//翻转结果的字符串str
        return str;
    }

      

  • 相关阅读:
    python自动化运维-编写rsync+sersync安装脚本实现文件实时同步
    引力产生的原因是什么
    Binder通信机制介绍
    Binder机制
    MySQL for Windows 解压缩版配置安装
    python 操作sqlite数据库
    python 生成验证码
    python 多线程
    python multiprocessing 多进程
    python @property 属性
  • 原文地址:https://www.cnblogs.com/yuanbo123/p/4887742.html
Copyright © 2020-2023  润新知