• 算法提高 P1001【大数乘法】


    当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

    输入:
      62773417 12345678

    输出:
      774980393241726

    题目分析

    用一个整数数组,来装每一次两个一位数的乘法结果,大数乘法结束后,再解决进位问题,最终倒序输出即可。

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <vector>
    #include <stdlib.h>
    #include <cstdlib>
    #include <string.h>
    #include <cmath>
    using namespace std;
    char a[10], b[10];
    int len_a, len_b;
    int c[20];
    
    void calculate() {
        for (int i = 0;i < len_a; i++) {
            for (int j = 0; j < len_b; j++) {
                c[i + j] += (a[i]- '0') * (b[j] - '0');
            }
        }
        int t = 0;
        for (int i = 0; i < 20; i++) {
            c[i] += t;
            t = c[i] / 10;
            c[i] %= 10;
        }
    }
    void pri() {
        int i = len_a + len_b - 1;
        for (; i >= 0; i--)
            if (c[i] != 0)        
                break;//找到第一位非零数字
        if (i < 0)
            cout << "0";//没有一位是非零数字
        for (; i >= 0; i--) {
            cout << c[i];
        }
    }
    int main() {
        scanf("%s", a);
        strrev(a);//逆置字符串
        len_a = strlen(a);
    
        scanf("%s", b);
        strrev(b);//逆置字符串
        len_b = strlen(b);
    
        calculate();
        pri();
        return 0;
    }
  • 相关阅读:
    python12306抢票
    函数、迭代器、生成器、装饰器
    类(面向对象、增删改查、继承、多态、封装、反射)
    js循环、异常、函数
    js引入、注释、事件
    天融信护网面试
    Java URL处理
    Java多线程编程
    Java网络编程
    Java序列化
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10455982.html
Copyright © 2020-2023  润新知