1
已采纳
夏义博
初级守护
初级守护
高精加
整形 x[100001],y[100001],z[100001],jw; //定义
string a,b;
int main(){
cin>>a>>b;
x[0]=a.size();
y[0]=b.size();
z[0]=max(x[0],y[0]);
for(int i=0;i<=x[0]-1;i++){
x[x[0]-i]=a[i]-'0';
}
for(int i=0;i<=y[0]-1;i++){
y[y[0]-i]=b[i]-'0';
}
for(int i=1;i<=z[0];i++){
z[i]=x[i]+y[i]+jw;
jw=z[i]/10;
z[i]=z[i]%10;
}
if(jw){
z[0]++;
z[z[0]]=jw;
}
for(int i=z[0];i>=1;i--){
cout<<z[i];
}
return 0;
}
高精减
int main()
{
定义 a[2000],b[2000],c[2000],lena,lenb,lenc,i;
char n[2000],n1[2000],n2[2000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(n1);
gets(n2);
如果 (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
{
strcpy(n,n1);
strcpy(n1,n2);
strcpy(n2,n);
cout<<"-";
}
lena=strlen(n1);lenb=strlen(n2);
for (i=0;i<=lena-1;i++) a[lena-i]=n1[i]-'0';
for (i=0;i<=lenb-1;i++) b[lenb-i]=n2[i]-'0';
i=1;
while (i<=lena)
{
if (a[i]<b[i])
{
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
i++;
}
lenc=i;
for (i=lenc;i>=1;i--)
if ((c[i]==0)&&(lenc>1)) lenc--;else break;
for (i=lenc;i>=1;i--) cout<<c[i];
cout<<endl;
return 0;
}
本蒟蒻只会加和减
望采纳
1
屈子元
初级守护
初级守护
提示一下,高精度的加减可以直接在字符串上操作,高精度加法,减法:
s[i]=a[i]+b[i]-'0';
if(s[i]>'9')
{
s[i]-=10;
s[i-1]++;
}
s[i]=a[i]-b[i]+'0';
if(s[i]<'0')
{
s[i]+=10;
s[i-1]--;
}
乘法也可以直接位操作,比如a[i]和b[j]直接位相乘,可以:
c[i+j]=(a[i]-'0')*(b[i]-'0')+'0';
最后进位操作
除法不常用也比较难,可以先不了解
上面的已经举报
上面的已举报
0
0
赵逸凡
初级启示者
初级启示者
《信息学竞赛一本通》上有,就是高精度类的。
node:
void Plus()
{
w[0]=max(c[0],d[0]);
int jw=0,h;
for(int i=1;i<=w[0];i++)
{
h=jw+c[i]+d[i];
w[i]=h%10;
jw=h/10;
}
if(jw!=0)
{
w[0]++;
w[w[0]]=jw;
}
}
传统的高精度加法
至于减法...等你悬赏20豆再说...
0
0
0