//默写高精度加法
//默写高精度乘法
//默写高精度减法
//默写高精度除法
#include <iostream>
#include <cstring>
using namespace std;
int const N=1001;
//输入大数
void init(int x[]){
char c[1001]={}; cin>>c;
int l=strlen(c);
for(int i=0;i<l;i++) x[l-i]=c[i]-'0';
while(x[l]==0&&l>1) l--;
x[0]=l;
}
//输出大数
void print(int x[]){
for(int i=x[0];i>0;i--) cout<<x[i];
cout<<endl;
}
//复制大数
void cpy(int f[],int t[],int d=0){
for(int i=f[0];i>0;i--) t[i+d]=f[i];
t[0]=f[0]+d;
}
//比较大数
int cmp(int a[],int b[]){
if(a[0]>b[0]) return 1;
if(a[0]<b[0]) return -1;
for(int i=a[0];i>0;i--){
if(a[i]>b[i]) return 1;
if(a[i]<b[i]) return -1;
}
return 0;
}
//高精度+高精度
void add(int a[],int b[],int c[]){
int l=a[0]>b[0]?a[0]:b[0];
for(int i=1;i<=l;i++) {
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
if(c[l+1]>0) l++;
c[0]=l;
}
//高精度+高精度 自加
void addex(int a[],int b[]){
int l=a[0]>b[0]?a[0]:b[0];
for(int i=1;i<=l;i++) {
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
if(a[l+1]>0) l++;
a[0]=l;
}
//高精度×低精度 自乘
void mulvex(int a[],int b){
int l=a[0],x=0;//存进位
for(int i=1;i<=l;i++){
a[i]=x+a[i]*b;
x=a[i]/10;
a[i]%=10;
}
while(x>0){
a[++l]=x%10;
x/=10;
}
a[0]=l;
}
//高精度×高精度
void mul(int a[],int b[],int c[]){
for(int j=1;j<=b[0];j++){
for(int i=1;i<=a[0];i++){
int d=i+j-1;
c[d]+=a[i]*b[j];
c[d+1]+=c[d]/10;
c[d]%=10;
}
}
int l=a[0]+b[0];
if(c[l]==0) l--;
c[0]=l;
}
//高精度-高精度
void sub(int a[],int b[],int c[]){
int l=a[0];
for(int i=1;i<=l;i++) {
c[i]=a[i]-b[i];
if(c[i]<0){
a[i+1]--;
c[i]+=10;
}
}
while(c[l]==0&&l>1) l--;
c[0]=l;
}
//高精度-高精度 自减
void subex(int a[],int b[]){
int l=a[0];
for(int i=1;i<=l;i++) {
a[i]-=b[i];
if(a[i]<0){
a[i+1]--;
a[i]+=10;
}
}
while(a[l]==0&&l>1) l--;
a[0]=l;
}
//高精度÷低精度
void divv(int a[],int b,int c[]){
int l=a[0],x=0;
for(int i=l;i>0;i--){
x=x*10+a[i];
c[i]=x/b;
x%=b;
}
while(c[l]==0&&l>1) l--;
c[0]=l;
}
//高精度÷高精度
void div(int a[],int b[],int c[]){
if(cmp(a,b)<0){ c[0]=1; return ;}
int t[N]={};
int l=a[0]-b[0]+1;
for(int d=a[0]-b[0];d>=0;d--){
memset(t,0,sizeof(t));
cpy(b,t,d);
while(cmp(a,t)>=0){
subex(a,t);
c[d+1]++;
}
}
if(c[l]==0) l--;
c[0]=l;
}
int main(){
int a[N]={},b[N]={},c[N]={},d;
init(a);init(b);
// cin>>d;
div(a,b,c);
print(c);
return 0;
}
高精度四则运算
最新推荐文章于 2025-06-01 12:45:30 发布
本文详细介绍并实现了高精度算术运算,包括加法、减法、乘法和除法等核心算法。通过C++代码展示了如何处理大数运算,适用于解决超出标准整型和浮点型数据类型限制的问题。
1851

被折叠的 条评论
为什么被折叠?



