高精度加减法

来源:互联网 发布:淘宝号被别人实名认证 编辑:程序博客网 时间:2024/05/24 07:41
#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<bif (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;}

0 0