大数乘法

  很久没手写过大数运算了,以前也都是直接贴模板的,今晚的模拟笔试最后一道大数乘法就没调好,gg……

#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;

string num1, num2;

int result[2048] = {0};

inline int chtoi(char ch) {
     return ch - '0' + 0;
}

#define  For(i,s,t)  for(int i = s; i < t; ++i)
inline void cal() {
    int len1 = num1.size(), len2 = num2.size(), LL = len1 + len2;
    memset(result, 0, sizeof(result));

    int h1 = len1 >> 1, h2 = len2 >> 1;

    For(i, 0, h1)
        swap(num1[i], num1[len1 - 1 - i]);
    For(i, 0, h2)
        swap(num2[i], num2[len2 - 1 - i]);

    For(i, 0, len1)  For(j, 0, len2)
        result[i + j] += chtoi(num1[i]) * chtoi(num2[j]);

    For(i, 0, LL) {
        result[i + 1] += result[i] / 10;
        result[i] %= 10;
    }
    while(LL > 1 && result[LL - 1] == 0)    --LL;
    int half = LL >> 1;
    for(int i = 0; i < half; ++i)
        swap(result[i], result[LL - 1 - i]);

    for(int i = 0; i < LL; ++i)
        cout << result[i] ;
    cout << endl;
}

int main() {
    while(cin >> num1 >> num2) {
        cal();
    }
}

  有很多细节笔试时都没处理好,后来才调好的,还是功力不够啊,不过不得不说笔试的时间还是挺赶的,选择题10多道半个小时感觉也不够用,下次得练得快一点才行了……编程题3道也不太会。。。

原文地址:https://www.cnblogs.com/Newdawn/p/5321495.html