高精度加法——C++实现_利用数组

来源:互联网 发布:淘宝店收的钱在哪里 编辑:程序博客网 时间:2024/05/22 05:15

#include <iostream>
#include <string>
#define MaxCharBufferSize 100
#define MaxIntBufferSize 50
#define CharPerInteger 8
#define CoverPerInteger 100000000


using namespace std;

/*void reversethearray(char* intarray,int lengthofarray){


char *arrayb=new char(lengthofarray);
for (int i=0;i<lengthofarray;i++)
{
arrayb[i]=intarray[i];
}
for (int i=0;i<lengthofarray;i++)
{
intarray[lengthofarray-i-1]=arrayb[i];
}
}
*/
int tens(int pow){
 int result=1;
 if(pow==0)
  return result;
 for (int i=0;i<pow;i++)
 {
  result=result*10;
 }
 return result;
}
int StringtoInteger(char* stringa,int* inta){
 int length=strlen(stringa);
 int count_size=length/CharPerInteger;
 if (length%CharPerInteger!=0)
 {
  count_size++;
 }
 for (int i=0;i<count_size;i++)
 {
  int buffer=0;

  for (int j=0;j<CharPerInteger&&(i*CharPerInteger+j)<length;j++)
  {
   buffer=buffer+(stringa[length-i*CharPerInteger-j-1]-'0')*tens(j);
   // cout<<buffer<<'/t';
  }
  inta[i]=buffer;
 }
 return count_size;
}

void Printthearray(int* inta,int length_string){
 for (int i=0;i<length_string;i++)
 {
  cout<<inta[i]<<'/t';
 }
 cout<<length_string<<endl;
}

int IntegerAnd(int* integera,int lengthofa,int* integerb,int lengthofb){
 bool flags[MaxIntBufferSize]={false};
 int length=lengthofa;
 if (lengthofa<lengthofb)
 {
  length=lengthofb;
  for(int i=lengthofa;i<length;i++)
   integera[i]=0;
 }
 else
  for (int i=lengthofb;i<length;i++)
  {
   integerb[i]=0;
  }
  cout<<"length="<<length<<endl;

  for (int i=0;i<length;i++)
  {
   int sum=integera[i]+integerb[i];
   if (sum>=CoverPerInteger)
   {
    flags[i]=true;

   }
   cout<<"flags("<<i<<")="<<flags[i]<<'/t';
   integera[i]=sum;
   cout<<integera[i]<<'/t';

  }

  cout<<endl;

  for (int i=0;i<length;i++)
  {
   if (flags[i]==true)
   {
    integera[i]=integera[i]-CoverPerInteger;
    integera[i+1]++;
    if (integera[i+1]>=CoverPerInteger)
    {
     flags[i+1]=true;
    }
   }
   if (flags[length-1]==true)
   {
    integera[length]=1;
    length++;
   }
  }
  cout<<"True length is:"<<length<<endl;

  return length;

}


void printtheresult( int* integer, int length )
{
 cout << "Last Reslut=" << endl;
 for ( int i = length - 1; i >= 0; i ++ )
 {
 }
}


void main(){
 char string1[MaxCharBufferSize];
 char string2[MaxCharBufferSize];
 int integer1[MaxIntBufferSize];
 int integer2[MaxIntBufferSize];
 cout<<"Enter the first number:";
 cin>>string1;
 cout<<"Enter the second number:";
 cin>>string2;

 // reversethearray(string1,strlen(string1));
 // reversethearray(string2,strlen(string2));
 int length1=StringtoInteger(string1,integer1);
 int length2=StringtoInteger(string2,integer2);


 Printthearray(integer1,length1);
 Printthearray(integer2,length2);

 

 int length=IntegerAnd(integer1,length1,integer2,length2);

 

 Printthearray(integer1,length);


 // printtheresult(integer1,length);

 for (;;)
 {
 }


}