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

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

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

    连续签到: 1 天

    [LV.6]常住居民II

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


    5. void mul(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.                 mul(&a, &b);
    17.         }
    18. }

    19. //乘法运算
    20. void mul(char a[], char b[])
    21. {
    22.         int la=strlen(a), lb=strlen(b);
    23.         int lm=la+lb, i, rem=0;
    24.         int x, y;
    25.         int k=0;
    26.         int m;

    27.         int *pa=(int*)malloc(sizeof(int)*la);
    28.         int *pb=(int*)malloc(sizeof(int)*lb);
    29.         int *pm=(int*)malloc(sizeof(int)*lm);

    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.         for(x=la-1;x>=0;x--)
    39.         {
    40.                 i=k;
    41.                 for(y=lb-1;y>=0;y--)
    42.                 {
    43.                         int mul = pa[x] * pb[y];
    44.                         if(x==(la-1) || y==0)
    45.                         {
    46.                                 pm[i] = mul;
    47.                         }else
    48.                         {
    49.                                 pm[i] = pm[i]+mul;
    50.                         }
    51.                         i++;
    52.                 }
    53.                 k++;
    54.         }
    55.        
    56.         m=i;
    57.         for(i=0;i<m;i++)
    58.         {
    59.                 int num = pm[i] + rem;
    60.                 pm[i] = num%10;
    61.                 rem = 0;
    62.                 if(num>9)
    63.                         rem = num/10;
    64.         }
    65.         if(rem>0)
    66.         {
    67.                 pm[i] = rem;
    68.                 i++;
    69.         }


    70.         printf("积为:\n");
    71.         while(i>0)
    72.         {
    73.                 printf("%d",pm[i-1]);
    74.                 i--;
    75.         }
    76.         printf("\n");
    77. }
    复制代码



    高级模式
    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:31 , Processed in 0.118563 second(s), 18 queries .

    X+ Open Developer Network (xodn.com)

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

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