高精度算法

北城以北 提交于 2019-12-01 16:43:16

1.大数相加

  1.1 思路:

    数组模拟小学加法过程 就行

    首先将 str1 ,str2 逆序存入 a[ ],b[ ],c[ ] 记录结果

    Max=( str1,str2 ) + 1

    for  0  to   Max-1

      a[ i ] 加入,b[ i ] 加入

      c[ i + 1 ] = c [ i ] /10;  //进位

      c[ i ] = c[ i ] %10; 

    end

    删除前导零

  1.2 代码模板:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int c[205],num;
void Plus(string A,string B){
    int a[205],b[205];
    int sa=A.size(),sb=B.size();
    num=max(sa,sb)+1;
    for(int i=0;i<sa;i++)
        a[i]=A[sa-i-1]-'0';
    for(int i=0;i<sb;i++)
        b[i]=B[sb-i-1]-'0';
    c[0]=0;
    for(int i=0;i<num;i++){
        if(i<sa)c[i]+=a[i];
        if(i<sb)c[i]+=b[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
    }
    while(!c[num]&&num>=1)num--;
}
int main(){
    string A,B;
    cin>>A>>B;
    Plus(A,B);
    for(int i=num;i>=0;i--)
        cout<<c[i];
    cout<<endl;
    return 0; 
}
View Code

  1.3 函数主体

int c[205],num;

void Plus(string A,string B){
    int a[205],b[205];
    int sa=A.size(),sb=B.size();
    num=max(sa,sb)+1;
    for(int i=0;i<sa;i++)
        a[i]=A[sa-i-1]-'0';
    for(int i=0;i<sb;i++)
        b[i]=B[sb-i-1]-'0';
    c[0]=0;
    for(int i=0;i<num;i++){
        if(i<sa)c[i]+=a[i];
        if(i<sb)c[i]+=b[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
    }
    while(!c[num]&&num>=1)num--;
}
View Code

  1.4 其他模板(更简单)

string Plus(string str1,string str2){
    string str;
    int len1=str1.size(),len2=str2.size();
    if(len1<len2){
        for(int i=1;i<=len2-len1;i++){
            str1="0"+str1;
        }
    }
    else{
        for(int i=1;i<=len2-len1;i++){
            str2="0"+str2;
        }
    }
    len1=str1.size();
    int num=0;
    int t;
    for(int i=len1-1;i>=0;i--){
        t=str1[i]-'0'+str2[i]-'0'+num;
        num=t/10;//进位
        t%=10;
        str=char(t+'0')+str;
    }
    if(num=0)
        str=char(num+'0')+str;
    return str;
}
View Code

 

2.大数相减

  1.1 思路:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!