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