高精度加减法(改良版)

来源:互联网 发布:淘宝号被别人实名认证 编辑:程序博客网 时间:2024/05/19 04:03
//说明:高精度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<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 (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;}

0 0