新技术论坛
搜索
查看: 1160|回复: 0
打印 上一主题 下一主题

[VC/C++] 高精度加法

[复制链接]
  • TA的每日心情
    无聊
    2016-9-11 15:26
  • 签到天数: 107 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-8-4 22:22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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. }
    复制代码



    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2025-1-4 01:44 , Processed in 0.109942 second(s), 18 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表