高精度计算(高精度乘高精度,高精度减高精度)

//作者:石门实验学校105王逸伦 
//题目:高精度乘法,减法  
//tips:本程序高精度数输入方法为:‘XXXXXX!’,以‘!’结尾 
#include
#include
#include
int ans[1000000];
using namespace std;
void _in(int a[],int &len);//输入高精度数 
void _turn(int a[],int len);//将高精度数翻转 
void _gjdcf(int a[],int b[],int ans[],int len1,int len2,int &len);//高精度乘法 
void _out(int a[],int len,bool fh);//输出高精度数 
void _gjdjf(int a[],int b[],int ans[],int len1,int len2,int &len);//高精度减法 
bool _bj(int a[],int b[],int len1,int len2);//比较高精度数 
//主程序: 
int main()
{
 bool fh;
 int a[100000],b[100000],len1=0,len2=0,len=0,mode;
 memset(ans,0,sizeof(ans));
 cout <<"作者:石门实验学校105王逸伦 "<> mode;
 cout << "本程序高精度数输入方法为:‘XXXXXX!’,以‘!’结尾 "<len2) _gjdcf(a,b,ans,len1,len2,len); //确保位数多的在上方(竖式乘法) 
   else _gjdcf(b,a,ans,len2,len1,len);
  fh=true;
 }
 else
 {
  if (_bj(a,b,len1,len2)) {_gjdjf(a,b,ans,len1,len2,len);fh=true;}//确保大数减小数,记录符号 
   else {_gjdjf(b,a,ans,len2,len1,len);fh=false;}
 }
 
 _out(ans,len,fh);//将高精度数输出(结果) 
}
void _out(int a[],int len,bool fh)
{
 _turn(a,len);
 int i=0;
 while (a[i]==0)i++;
 if (!fh) cout << '-';
 for (;i<=len-1;i++) cout << a[i]; //倒序输出 
}
void _turn(int a[],int len)
{
 int j=len-1;
 for(int i=0;i> ch;
  if (ch=='!') break; //高精度数以‘!’结尾 
  a[len]=int(ch-48);  //转数字 
  len++;
 }
 _turn(a,len);  //从个位开始,调转,方便下面计算 
}
void _gjdcf( int a[],int b[],int ans[],int len1,int len2,int &len)
{
 int jw=0,dq=0;  //jw为进位,dq为当前数(未%10) 
 for(int i=0;i<=len1-1;i++)
  for(int j=0;j<=len2-1;j++)
  {
   dq=ans[i+j]+a[i]*a[j]+jw;
   ans[i+j]=dq % 10;  //取个位 
   jw=dq / 10;//算进位 
  }
 len=len1+len2-1;//未进位长度 
 for (;jw>0;jw/=10) ans[len++] =jw % 10;//其余进位 
}
void _gjdjf(int a[],int b[],int ans[],int len1,int len2,int &len)
{
 int tw=0;
 for (int i=0;i<=len1-1;i++)
 {
  if ((a[i]-b[i]-tw)<0)      //判断是否需要退位 
  {
   ans[i]=a[i]-b[i]-tw+10;
   tw=1;
  }
  else
  {
   ans[i]=a[i]-b[i]-tw;
   tw=0;
  }
  //cout << i<<' '<len2) return true;
  else if (len2>len1) return false; //先比较长度 
 for (int i=0;i<=len1-1;i++)
    if (a[i]>b[i]) return true;  
   else if (b[i]>a[i]) return false;//逐个比较 
 return true;  //相同 
}


你可能感兴趣的:(C++)