设计一个程序实现两个位数不超过 n 位的长整数的高精度加法? 100 <= n <= 1000 用c++编写.谢谢

用c++编写.谢谢非常感谢
2024-11-22 06:06:23
推荐回答(1个)
回答(1):

/*不好意思没有看清题目,我的程序可以实现加法和减法,你可以参考以下东西。
http://zhidao.baidu.com/question/16273609.html?si=2
http://zhidao.baidu.com/question/16580850.html?si=3
*/
#include
#include

int getlength(char *ch)
{
int i;
for(i=0;i<1000;i++)
if(ch[i]=='\0')
break;
return i;
}

void plusdata(int *dt,int *pdt,int k,int kk)
{
int i;
for(i=0;i {
dt[i]=dt[i]+pdt[i];
if(dt[i]>9)
{
dt[i]-=10;
dt[i+1]++;
}
}
if(dt[i]>9)
{
dt[i]-=10;
dt[i+1]++;
}
if(dt[kk]!=0)
i=kk;
else
i=kk-1;
for(;i>=0;i--)
cout< cout<}

void minusdata(int *dt,int *mdt,int k,int kk,int signal)
{
int i;
for(i=0;i {
dt[i]=dt[i]-mdt[i];
if(dt[i]<0)
{
dt[i]+=10;
dt[i+1]--;
}
}
if(dt[i]<0)
{
dt[i]+=10;
dt[i+1]--;
}
while(dt[kk]==0)
kk--;
if(signal==0)
cout<<'-';
for(i=kk;i>=0;i--)
cout< cout<}

void main()
{
char ch1[1000],ch2[1000],ch0[2],ch;
int data1[1001],data2[1001];
int i,j,k1,k2,flag=0;

for(i=0;i<1001;i++)
{
data1[i]=0;
data2[i]=0;
}

cout<<"You can input the first date"< cin>>ch1;
cout<<"You can input the second date"< cin>>ch2;
cout<<"What operation you want?( + or - )"< cin>>ch;
ch0[1]='\0';

j=0;
while(ch1[j]=='0')
j++;
for(i=0;i<999-j;i++)
ch1[i]=ch1[i+j];
j=0;
while(ch2[j]=='0')
j++;
for(i=0;i<999-j;i++)
ch2[i]=ch2[i+j];

k1=getlength(ch1);
k2=getlength(ch2);

j=k1;
for(i=0;i {
j--;
ch0[0]=ch1[j];
data1[i]=atoi(ch0);
// cout< if((ch1[i]<'0')||(ch1[i]>'9'))
flag=1;
}
// cout< j=k2;
for(i=0;i {
j--;
ch0[0]=ch2[j];
data2[i]=atoi(ch0);
// cout< if((ch2[i]<'0')||(ch2[i]>'9'))
flag=1;
}
// cout<
if(flag==0)
{
if(ch=='+')
{
if(k1 plusdata(data2,data1,k1,k2);
else
plusdata(data1,data2,k2,k1);
}
if(ch=='-')
{
if(k1==k2)
{
while(data1[k1-1]==data2[k1-1])
k1-=1;
if(data1[k1-1]>data2[k1-1])
minusdata(data1,data2,k2,k2,1);
else
minusdata(data2,data1,k2,k2,0);
}
else
{
if(k1>k2)
minusdata(data1,data2,k2,k1,1);
else
minusdata(data2,data1,k1,k2,0);
}
}
}
else
cout<<"You have input a invaluable char!"<}