//说明:高精度1.1版本
//添加了 交互 , 高精度减法的负号
#include <iostream>
#include <string>
using namespace std;
int a[100]={0},b[100]={0};
int len1,len2,lenmax;
string s1,s2;
int main()
{
void input(int a[],int b[]);
void add(int a[],int b[]);
void minus(int a[],int b[]);
char c;//c表示符号
int i,p=1;
while (1) //交互
{
input(a,b);
cout<<"请输入符号:";
cin>>c;
if (len1>=len2) lenmax=len1;
else lenmax=len2;
switch (c)
{
case'+':add(a,b);break;
case'-':minus(a,b);
}
cout<<"请问要继续虐待你的计算机吗?(1/0) ";
cin>>p;
if (p==0) break;
c='\0';
for (i=0;i<len1;i++)
a[i]=0;
for (i=0;i<len1;i++)
b[i]=0;
}
cout<<"程序结束,你的计算机终于可以休息啦~呼呼~o(∩_∩)o "<<endl;
return 0;
}
//********input************
void input(int a[],int b[])
{
cout<<"请输入两个正整数:"<<endl;
cin>>s1>>s2;
int i;
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};
for (int i=0;i<lenmax;i++)
{
sum[i]=sum[i]+a[i]+b[i];
if (sum[i]>=10)
{
sum[i+1]+=sum[i]/10;
sum[i]=sum[i]%10;
}
}
if (sum[lenmax]!=0) cout<<sum[lenmax];
for (int i=0;i<lenmax;i++)
cout<<sum[lenmax-1-i];
cout<<endl;
}
//********减法********
void minus(int a[],int b[])
{
int sum[100]={0};
int 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 (int i=0;i<lenmax;i++)
{
if (a[i]>=b[i]) sum[i]=sum[i]+a[i]-b[i];
else
{
a[i+1]-=1;
sum[i]=a[i]+10-b[i];
}
}
}
else //a<b
{
for (int i=0;i<lenmax;i++)
{
if (b[i]>=a[i]) sum[i]=sum[i]+b[i]-a[i];
else
{
b[i+1]-=1;
sum[i]=b[i]+10-a[i];
}
}
}
if (f==0) cout<<'-'; //如果a<b,即是负数,要加一个负号
if (sum[lenmax-1]!=0) cout<<sum[lenmax-1];
for (int i=0;i<lenmax-1;i++)
cout<<sum[lenmax-2-i];
cout<<endl;
}
高精度加减法(改良版)
最新推荐文章于 2025-03-31 12:32:12 发布