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

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

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

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-8-4 22:24:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <malloc.h>
    4. #include <stdlib.h>


    5. void minus(char a[], char b[], char ch);                //减法运算
    6. int isnev(char a[],char b[]);                //判断差的符号

    7. void main(void)
    8. {
    9.         char f;
    10.         char a[200], b[200];
    11.         scanf("%s", &a);
    12.         scanf("%s", &f);
    13.         scanf("%s", &b);
    14.         if(f=='-')
    15.         {
    16.                 printf("减法运算:\n");
    17.                 if(isnev(&a, &b)==1)
    18.                         minus(&a, &b, '+');
    19.                 else
    20.                         minus(&b, &a, '-');
    21.         }
    22. }

    23. //判断差的符号
    24. int isnev(char a[],char b[])
    25. {  
    26.     int l1,l2;  
    27.     l1=strlen(a);  
    28.     l2=strlen(b);  
    29.     if (l1>l2)  
    30.     {  
    31.         return 1;  
    32.     }  
    33.     else if (l1<l2)  
    34.     {  
    35.         return 0;  
    36.     }  
    37.     else  
    38.     {  
    39.         if (strcmp(a,b)>=0)  
    40.         {  
    41.             return 1;  
    42.         }  
    43.         else  
    44.         {  
    45.             return 0;  
    46.         }  
    47.     }  
    48. }


    49. //减法运算
    50. void minus(char a[], char b[], char ch)
    51. {
    52.         int la=strlen(a), lb=strlen(b);
    53.         int lm=la;
    54.         int i;

    55.         int *pa=(int*)malloc(sizeof(int)*la);
    56.         int *pb=(int*)malloc(sizeof(int)*lb);
    57.         int *pm=(int*)malloc(sizeof(int)*lm);

    58.                 printf("符号:%c\n", ch);
    59.         for(i=0;i<la;i++)
    60.         {
    61.                 pa[i]=a[i]-48;
    62.         }
    63.         for(i=0;i<lb;i++)
    64.         {
    65.                 pb[i]=b[i]-48;
    66.         }

    67.         i=0;
    68.         while(lb>0)
    69.         {
    70.                 int x, y;
    71.                 x = pa[la-1];
    72.                 y = pb[lb-1];
    73.                 if(x>=y)
    74.                         pm[i]=x-y;
    75.                 else
    76.                 {
    77.                         //借位
    78.                         int k=la-2;
    79.                         if(pa[k]>0)
    80.                         {
    81.                                 x = x+10;
    82.                                 pa[k]=pa[k]-1;
    83.                         }else
    84.                         {
    85.                                 while(pa[k]==0)
    86.                                 {
    87.                                         pa[k]=9;
    88.                                         k--;
    89.                                 }
    90.                                 pa[k]=pa[k]-1;
    91.                                 x=x+10;
    92.                         }
    93.                         pm[i]=x-y;
    94.                 }

    95.                 i++;
    96.                 la--;
    97.                 lb--;
    98.         }
    99.         while(la>0)
    100.         {
    101.                 pm[i] = pa[la-1];
    102.                 i++;
    103.                 la--;
    104.         }

    105.         printf("差为:\n");
    106.         if(ch=='-')
    107.                 printf("%c", ch);
    108.         while(i<=0 || pm[i-1]==0)
    109.         {
    110.                 i--;
    111.         }

    112.         while(i>0)
    113.         {
    114.                 printf("%d", pm[i-1]);
    115.                 i--;
    116.         }
    117.         printf("\n");

    118. }
    复制代码



    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

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

    GMT+8, 2024-12-23 00:40 , Processed in 0.120649 second(s), 18 queries .

    X+ Open Developer Network (xodn.com)

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

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