特别大的数add

来源:互联网 发布:淘宝小智外设店名字 编辑:程序博客网 时间:2024/04/27 19:38


#include <stdio.h>
#include<stdlib.h>
#include "string.h"
#include "malloc.h"


int* invert(int * p,int index)
{
 int  i = 0;
 int  len = index /2;
 for (i ; i< len ; i ++)
 {
  int t;
  t =  p[i] ;
  p[i] =  p[index - i -1];
  p[index - i -1]= t;
 }
 return p;
}
int add_fr(int * p, int * p1,int* maxNum,int *result)
{
 int  i =0 ;
 int t   = 0 ;
 static int div =0;
 bool  flag = false;
 bool  flag_1 = false;
 static int num = 0;
 for (i = 0; i<*maxNum; i ++)
 {

  t =  div + p[i]  + p1[i];
  if (t < 10)
  {
   result[i] = t;
   div = 0;
  }
  else
  {
   int res;
   res = t % 10;
   div = t / 10;
   result[i] = res;
  }
  if (i == * maxNum -2 && (t >= 10))
  {
   flag = true;
  }
  if (i == *maxNum - 1 && (t >=10))
  {
   flag_1 = true;
  }
  if (flag && flag_1)
  {
   * maxNum += 1;
   flag = false;
   flag_1 = false;
   result[*maxNum -1]= 1;   
  }
  if (flag_1 && flag == false)
  {
   break;
  }
 }
 return 0;
}
int main()
{
 int i;
 int num1  = 0;
 int num2 = 0;
 char cc1[100] = {0};
 char  cc2[100] = {0};
 int b[100];
 int b1[100];
 int * p = NULL;
 int * p1= NULL;
 int * result = NULL;
 int  maxNUm= 0;
 int *pNum= NULL;
 gets(cc1);
 gets(cc2);
 memset(b,0, sizeof(b));
 memset(b1,0,sizeof(b1));

 pNum = &maxNUm;
 for (i = 0;cc1[i]!='\0' ;i ++)
 {
  b[i] = cc1[i]- '0';
  num1++;
 }
 for (i= 0;cc2[i] !='\0'; i ++)
 {
  b1[i] =cc2[i]- '0';
  num2 ++;
  //printf(" %d ", b1[i]);
 }
 if (num1 >num2)
 {
  *pNum  = num1;
 }
 else
 {
  *pNum  = num2;
 }
 p = b;
 p1 = b1;
 result =(int * )malloc(sizeof(int ) * 1000);
 memset(result,0, sizeof(int ) * 1000);
 invert( p,num1);
 invert( p1,num2);
 add_fr(p, p1,pNum,result);

 invert( result,*pNum);
 //printf("p =  %d, p1 = %d, res= %d , pNum= %d \n", p[0],p1[0], result[0], *pNum);

 i= 0;
 for (i; i< *pNum; i++)
 {
  printf("%d ",result[i]);
 }
 getchar();
 free(result);
 return 0;
}

0 0