#include <iostream>
#include <string>
int a[100]={0},b[100]={0}; //初始化数组
int len1=0,len2=0,lenmax=0;//输入数字的位数lenmax是指最长的那个数字
using namespace std;
string s1,s2;
int main()
{
void input(int a[],int b[]);
void add(int a[],int b[]);
void minus(int a[],int b[]);
input(a,b);
if (len1>=len2) lenmax=len1;
else lenmax=len2;
// add(a,b);
minus(a,b);
return 0;
}
void input(int a[],int b[])
{
int i;
cout<<"请输入两个整数(注意第一位是符号位:1代表正,0代表负)"<<endl;
cin>>s1>>s2;
len1=s1.length();
len2=s2.length();
//把字符变成数字,并且将其反转。反转后最后一位变成了符号位
for (i=0;i<len1;i++)
a[i]=s1[len1-1-i]-'0';
for (i=0;i<len2;i++)
b[i]=s2[len2-1-i]-'0';
/* for (i=0;i<len1;i++)
cout<<a[i]<<' ';
cout<<endl;
for (i=0;i<len2;i++)
cout<<b[i]<<' ';
cout<<endl;*/
}
//********************************************高精度加法*****************************************************
void add(int a[],int b[])
{
int sum[100]={0};
int i,lenend=0;//lenend为结构的位数
for (i=0;i<lenmax;i++) //加法
{
lenend++;
sum[i]=sum[i]+a[i]+b[i];
sum[i+1]=sum[i]/10; //**这里注意了了!!!要先算了下一位再来求余数,因为都要用到sum[i]本身**
sum[i]=sum[i]%10;
}
if (sum[lenend]!=0) cout<<sum[lenend];
for (i=lenend-1;i>=0;i--)
cout<<sum[i];
cout<<endl;
}
//********************************************高精度减法*****************************************************
void minus(int a[],int b[])
{
int sum[100]={0};
int i,lenend=0,f;//f=1表示a>b,f=0表示a<b
if (len1>len2) f=1;
else if (len1<len2) f=0;
else if (s1>s2) f=1;
else if (s1<s2) f=0;
if (f) //如果a>b
{
for (i=0;i<lenmax;i++)
{
lenend++;
if (a[i]>=b[i]) sum[i]=a[i]-b[i];//
else //借位处理
{
a[i+1]-=1;
sum[i]=a[i]+10-b[i];
}
}
}
else //a<b
{
for (i=0;i<lenmax;i++)
{
lenend++;
if (b[i]>=a[i]) sum[i]=b[i]-a[i];
else
{
b[i+1]-=1; //借位处理
sum[i]=b[i]+10-a[i];
}
}
}
if (sum[lenend-1]!=0) cout<<sum[lenend-1];
for (i=lenend-2;i>=0;i--)
cout<<sum[i];
cout<<endl;
}
高精度加减法
最新推荐文章于 2023-12-26 20:44:37 发布