• SDNU 1232.A*B Problem(高精度)


    这道题虽然数据很大,但是可以用数学的乘法运算来解决

    Description

    Calculate a*b

    Input

    Input contains multiple test cases.
    Each test case contains two number a and b (0<=a,b<=10^1000),

    Output

    Output a*b

    Sample Input

    12345678987654321 98765432123456789

    Sample Output

    1219326320073159566072245112635269

    Hint

    练习模拟大数乘法
    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    string a, b;
    int x[1000+8], y[1000+8], sum[1000000+8], t;
    int main()
    {
        while(cin >> a >> b)
        {
            int lena = a.size();
            int lenb = b.size();
            int lens = 0;
            memset(sum, 0, sizeof(sum));
            for(int i = 0; i<lena; i++)
                {
                    x[lena-i] = a[i]-48;//-48等于-'0',并且把这个字符串倒序输入数列X中
                }
            for(int i = 0; i<lenb; i++)
            {
                y[lenb-i] = b[i]-48;
            }
            for(int i = 1; i<=lena; i++)//像数学乘法一样,把所有的数都乘起来
            {
                t = 0;//记录要进的位数
                for(int j = 1; j <= lenb; j++)
                {
                    sum[i+j-1] += x[i]*y[j]+t;
                    t = sum[i+j-1]/10;
                    sum[i+j-1] %= 10;
                }
                sum[i+lenb] = t;
            }
            lens = lena+lenb;
            while(sum[lens] == 0 &&lens>1) lens--;
            for(int i = lens; i >= 1; i--)printf("%d", sum[i]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Gym-102040B Counting Inversion
    hdu 6899 Xor
    CSPS2019游记
    [网络流系列]网络流基础
    [线段树系列]几道不错的线段树题目题解
    浅谈矩阵[简洁易懂]——上篇
    DP动态规划学习笔记——高级篇上
    DP动态规划学习笔记
    [点分治系列] 静态点分
    [数论系列] 素数篇
  • 原文地址:https://www.cnblogs.com/RootVount/p/10371456.html
Copyright © 2020-2023  润新知