P1303 A*B Problem(高精度乘法)

P1303 A*B Problem

题目描述
求两数的积。

输入格式
两行,两个数。

输出格式

输入输出样例

输入 #1 复制
1 
2
输出 #1 复制
2

说明/提示
每个数字不超过10^2000,需用高精


思路: 模仿竖式乘法

题解如下

    //大数乘法
#include<iostream>
#include<string.h>
using namespace std;
const int Max = 10000;
int a[Max];		//a,b数组逆序存数
int b[Max];
int res[Max];

int len(int a[])
{
    int i;
    for(i = Max - 10; i > 0; i --)
    {
        if(a[i])
            break;
    }
    return i;
}
//大数乘核心
void multiplay(int a[] , int b[])
{
    int len_a = len(a);
    int len_b = len(b);
    //模仿竖式乘法
    for(int i = 0; i <= len_a; i ++)
        for(int j = 0; j <= len_b; j ++)
            res[i + j] += a[i] * b[j];
    for(int i = 0; i <= len_a + len_b + 1; i ++)
    {
        res[i + 1] += res[i] / 10;
        res[i] %= 10;
    }
}

int main()
{
    char m[Max],n[Max];
    scanf("%s %s",m,n);
    //转存待处理char数组
    int len_m = (int)strlen(m),len_n = (int)strlen(n);
    int pos_a = 0,pos_b = 0;
    for(int i = len_m - 1; i >= 0; i --)
        a[pos_a ++] = m[i] - '0';
    for(int i = len_n - 1; i >= 0; i --)
        b[pos_b ++] = n[i] - '0';

    multiplay(a, b);
    //输出结果
    for(int i = len(res); i >= 0; i --)
    {
        putchar((char)res[i] + '0');
    }
    printf("\n");

    return 0;
}
发布了78 篇原创文章 · 获赞 109 · 访问量 5637

猜你喜欢

转载自blog.csdn.net/qq_34261446/article/details/104052607
ab
今日推荐