高精度四则运算
高精度四则运算
高精度加法
#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();
}
}

浙公网安备 33010602011771号