高精度四则运算

高精度四则运算

高精度加法

#include <bits/stdc++.h>
using namespace std;
vector<int> add(vector<int>& a,vector<int>& b)
{
    vector<int>c;
    if(a.size()<b.size())return add(b,a);//这里保证a的长度比b的长
    int t=0;//表示进位
    for(int i=0;i<a.size();i++)
    {
        t+=a[i];
        if(i<b.size())t+=b[i];
        c.push_back(t%10);
        t/=10;
    }
    if(t)c.push_back(1);//可能遗漏的进位
    return c;
}
int main()
{
    string a,b;
    cin>>a>>b;//a="123456"
    vector<int>A,B;
    for (int i = a.size() - 1; i >= 0; i--)A.push_back(a[i] - '0');//A="654321"
	for (int i = b.size() - 1; i >= 0; i--)B.push_back(b[i] - '0');
    auto c=add(A,B);
    for(int i=c.size()-1;i>=0;i--)cout<<c[i];//倒过来打印
    return 0;
}
//流氓做法:Java大整数
import java.lang.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger a=sc.nextBigInteger();
        BigInteger b=sc.nextBigInteger();
        System.out.print(a.add(b));

        sc.close();
    }

}

高精度乘法

两个非负的大整数相乘:

c[i+j-1]=a[i]+b[j]

考虑进位的问题

//关系式
c[i+j-1]+=a[i]+b[j];
c[i+j]+=C[I+J-1]/10;
C[i+j-1]%=10;
#include <bits/stdc++.h>
using namespace std;
const int maxn=50001;
char s1[maxn],s2[maxn];
int a[maxn],b[maxn],c[maxn];
int main()
{
    int la,lb,lc;
    scanf("%s",s1);
    scanf("%s",s2);
    la=strlen(s1);
    lb=strlen(s2);
    for(int i=0;i<la;i++)
    a[la-i]=s1[i]-'0';
    for(int i=0;i<lb;i++)
    b[lb-i]=s2[i]-'0';   
    lc=la+lb;
    for(int i=1;i<=la;i++)
    {
        for(int j=1;j<=lb;j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    }
    while(c[lc]==0&&lc>1)lc--;//删去前导0
    for(int i=lc;i>0;i--)
    {
        cout<<c[i];
    }
    system("pause");
    return 0;
}

大整数阶乘Java操作

import sun.reflect.generics.tree.Tree;

import java.lang.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
    public static BigInteger getFactorial(int n){
        BigInteger result=new BigInteger("1");
        for(int i=1;i<=n;i++){
            result=result.multiply(BigInteger.valueOf(i));
        }
        return result;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        BigInteger sum=new BigInteger("0");
        for(int i=1;i<=a;i++)
        {
            sum=sum.add(getFactorial(i));
            //System.out.print(sum+" ");
            //System.out.println(getFactorial(i));
        }
        System.out.print(sum);
        sc.close();
    }

}
posted @ 2022-10-19 20:48  URMSTAR  阅读(31)  评论(0)    收藏  举报