开发者俱乐部

标题: 高精度加法 [打印本页]

作者: balala    时间: 2016-8-4 22:22
标题: 高精度加法
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>


  5. void add(char a[], char b[]);

  6. void main(void)
  7. {
  8.         char f;
  9.         char a[200], b[200];
  10.         scanf("%s", &a);
  11.         scanf("%s", &f);
  12.         scanf("%s", &b);
  13.         if(f=='+')
  14.         {
  15.                 printf("加法运算:\n");
  16.                 add(&a, &b);
  17.         }
  18. }

  19. //加法
  20. void add(char a[], char b[])
  21. {
  22.         int la=strlen(a), lb=strlen(b);
  23.         int ls, i, rem=0;
  24.        
  25.         int *pa=(int*)malloc(sizeof(int)*la);
  26.         int *pb=(int*)malloc(sizeof(int)*lb);
  27.         int *ps;
  28.         (la>lb)?(ls=la):(ls=lb);
  29.         ps=(int*)malloc(sizeof(int)*ls);

  30.         for(i=0;i<la;i++)
  31.         {
  32.                 pa[i]=a[i]-48;
  33.         }
  34.         for(i=0;i<lb;i++)
  35.         {
  36.                 pb[i]=b[i]-48;
  37.         }

  38.         i=0;
  39.         while(la>0 && lb>0)
  40.         {
  41.                 int sum=pa[la-1]+pb[lb-1];
  42.                 ps[i]=rem+(sum%10);
  43.                 rem=0;
  44.                 if(sum>9)
  45.                         rem=sum/10;
  46.                 i++;
  47.                 la--;
  48.                 lb--;
  49.         }
  50.         if(la>0)
  51.         {
  52.                 while(la>0)
  53.                 {
  54.                         int sum=rem+pa[la-1];
  55.                         ps[i]=sum%10;
  56.                         rem=0;
  57.                         if(sum>9)
  58.                                 rem=sum/10;
  59.                         i++;
  60.                         la--;
  61.                 }
  62.         }else
  63.                 if(lb>0)
  64.                 {
  65.                         while(lb>0)
  66.                         {
  67.                                 int sum=rem+pb[lb-1];
  68.                                 ps[i]=sum%10;
  69.                                 rem=0;
  70.                                 if(sum>9)
  71.                                         rem=sum/10;
  72.                                 i++;
  73.                                 lb--;
  74.                         }
  75.                 }


  76.         if(rem>0)
  77.         {
  78.                 ps[i]=rem;
  79.                 i++;
  80.         }


  81.         printf("和为:\n");
  82.         while(i>0)
  83.         {
  84.                 printf("%d", ps[i-1]);
  85.                 i--;
  86.         }
  87.         printf("\n");
  88. }
复制代码








欢迎光临 开发者俱乐部 (http://xodn.com/) Powered by Discuz! X3.2