大数乘法
很久没手写过大数运算了,以前也都是直接贴模板的,今晚的模拟笔试最后一道大数乘法就没调好,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道也不太会。。。