专栏文章
高精度加减乘法
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip1wobe
- 此快照首次捕获于
- 2025/12/03 04:49 3 个月前
- 此快照最后确认于
- 2025/12/03 04:49 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
void jf(string a,string b){
int an[1000]={0},bn[1000]={0};
int lena=a.size(),lenb=b.size();
int lenmax=max(lena,lenb);
for(int i=0;i<lena;i++){
an[i]=a[lena-i-1]-'0';
}
for(int i=0;i<lenb;i++){
bn[i]=b[lenb-i-1]-'0';
}
for(int i=0;i<lenmax;i++){
an[i]+=bn[i];
if(an[i]>=10){
an[i]%=10;
an[i+1]+=1;
}
}
if(an[lenmax]!=0)lenmax++;
for(int i=lenmax-1;i>=0;i--){
cout<<an[i];
}
}
void gao_jing_du_jian_fa(string a,string b){
int an[1000],bn[1000];
int lena=a.size(),lenb=b.size();
int len=max(lena,lenb);
bool f;
if(lena==lenb){
if(a>b)f=0;
else f=1;
}
else{
if(len==lena)f=0;
else f=1;
}
if(f)swap(a,b);
for(int i=0;i<lena;i++){
an[i]=a[lena-i-1]-'0';
}
for(int i=0;i<lenb;i++){
bn[i]=b[lenb-i-1]-'0';
}
for(int i=0;i<len;i++){
an[i]-=bn[i];
if(an[i]<0){
an[i]+=10;
an[i+1]-=1;
}
}
while(an[len-1]==0&&len>1)len--;
if(f)cout<<"-";
for(int i=len-1;i>=0;i--)cout<<an[i];
}
void gao_jing_du_cheng_fa(string a1,string b1){
int a[1000]={0},b[1000]={0},c[1000]={0};
int lena=a1.size(),lenb=b1.size();
for(int i=lena-1;i>=0;i--){
a[i]=a1[lena-1-i]-'0';
}
for(int i=lenb-1;i>=0;i--){
b[i]=b1[lenb-1-i]-'0';
}
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){
c[i+j]+=a[i]*b[j];
}
}
int len_sum=lena+lenb;
for(int i=0;i<len_sum;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[len_sum-1]>=10){
c[len_sum]+=c[len_sum-1]/10;
c[len_sum-1]%=10;
len_sum++;
}
while(c[len_sum-1]==0&&len_sum>1)len_sum--;
string ans="";
for(int i=0;i<len_sum;i++){
ans+=c[i]+'0';
}
for(int i=len_sum-1;i>=0;i--){
cout<<ans[i];
}
}
int main(){
string a,b;
char c;
cin>>a>>c>>b;
if(c=='+'){
jf(a,b);
}else if(c=='-'){
gao_jing_du_jian_fa(a,b);
}else if(c=='*'){
gao_jing_du_cheng_fa(a,b);
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...