首页 > 代码库 > sicily 1020. Big Integer
sicily 1020. Big Integer
Long long ago, there was a super computer that could deal with VeryLongIntegers(no VeryLongInteger will be negative). Do you know how this computer stores the VeryLongIntegers? This computer has a set of n positive integers: b1,b2,...,bn, which is called a basis for the computer.
The basis satisfies two properties:
1) 1 < bi <= 1000 (1 <= i <= n),
2) gcd(bi,bj) = 1 (1 <= i,j <= n, i ≠ j).
Let M = b1*b2*...*bn
Given an integer x, which is nonegative and less than M, the ordered n-tuples (x mod b1, x mod b2, ..., x mod bn), which is called the representation of x, will be put into the computer.
The input consists of T test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains three lines.
The first line contains an integer n(<=100).
The second line contains n integers: b1,b2,...,bn, which is the basis of the computer.
The third line contains a single VeryLongInteger x.
Each VeryLongInteger will be 400 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The output format is:(r1,r2,...,rn)
232 3 51042 3 5 713
(0,1,0)(1,1,3,6)
#include <iostream>#include <string>#include <string.h>using namespace std; int* findMod(string str, int* arr, int len) { int size = str.size(); int* arrt = new int[len]; memset(arrt, 0, sizeof(int) * len); for (int i = 0; i != size; ++i) { for (int j = 0; j != len; ++j) { arrt[j] = (arrt[j] * 10 + (str[i] - ‘0‘)) % arr[j]; } } return arrt;} int main(int argc, char* argv[]){ int T, n, *arr; string x; cin >> T; while (T--) { cin >> n; arr = new int[n]; for (int i = 0; i != n; ++i) cin >> arr[i]; cin >> x; int *result = findMod(x, arr, n); cout << "("; for (int i = 0; i != n - 1; i++) cout << result[i] << ","; cout << result[n - 1] << ")" << endl; } return 0;}
因为给的空间还是很大的,所以我在mod的时候用空间换时间,其实这样实现是不好的,因为申请的空间根本没释放。下面这样的话比较好一点,时间上也只是差了0.07多
sicily 1020. Big Integer