码迷,mamicode.com
首页 > 其他好文 > 详细

大数乘法

时间:2017-10-20 18:44:44      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:转化   har   print   std   space   大数   temp   str   超过   

方法:和加减法类似,同样是用字符串数组存储,再转化为整形数组

步骤:1、反向存储(反转),转化为整形

   2、乘积进位

     3、逆序输出

#include<bits/stdc++.h>
using namespace std;

char a[1005];
char b[1005];
int aa[1005];
int bb[1005];
int c[1005];

int main()
{
    while(scanf("%s%s",a,b))
    {
        memset(aa,0,sizeof(aa));
        memset(bb,0,sizeof(bb));
        memset(c,0,sizeof(c));

        int lena = strlen(a);
        int lenb = strlen(b);

        for(int i = lena - 1 ; i >= 0 ; i--)
            aa[lena - i - 1] = a[i] - 0;

        for(int i = lenb - 1 ; i >= 0 ; i--)
            bb[lenb - i - 1] = b[i] - 0;

        for(int i = 0 ; i < lena ; i++)
        {
            for(int j = 0 ; j < lenb ; j++)
            {
                c[i+j] += aa[i]*bb[j];
            }
        }
        ///所乘得的结果的位数不会超过两个的和
        ///99 * 99 = 9801(4位)  999 * 999 = 998001(6位)
        int lenc = lena + lenb;
        int jinwei = 0;
        for(int i = 0 ; i < lenc ; i++)
        {
            int temp = c[i] + jinwei;

            jinwei = temp / 10;
            c[i] = temp % 10;
        }

        while(c[lenc - 1]==0&&lenc>1)
            lenc--;
        for(int i = lenc - 1 ; i >= 0 ; i--)
        {
            printf("%d",c[i]);
        }
        printf("\n");
        printf("-----------\n");
    }
    return 0;
}

 

 

代码:

大数乘法

标签:转化   har   print   std   space   大数   temp   str   超过   

原文地址:http://www.cnblogs.com/hhkobeww/p/7700248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!