Created
March 21, 2015 15:03
-
-
Save 910JQK/f320e72c4f57ff40479b to your computer and use it in GitHub Desktop.
Arbitrary-precision arithmetic (testing source files)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <string> | |
| using std::string; | |
| char data[58][58][2]; | |
| void init(){ | |
| data['0']['0'][0] = '0'; | |
| data['0']['0'][1] = '0'; | |
| data['0']['1'][0] = '0'; | |
| data['0']['1'][1] = '1'; | |
| data['0']['2'][0] = '0'; | |
| data['0']['2'][1] = '2'; | |
| data['0']['3'][0] = '0'; | |
| data['0']['3'][1] = '3'; | |
| data['0']['4'][0] = '0'; | |
| data['0']['4'][1] = '4'; | |
| data['0']['5'][0] = '0'; | |
| data['0']['5'][1] = '5'; | |
| data['0']['6'][0] = '0'; | |
| data['0']['6'][1] = '6'; | |
| data['0']['7'][0] = '0'; | |
| data['0']['7'][1] = '7'; | |
| data['0']['8'][0] = '0'; | |
| data['0']['8'][1] = '8'; | |
| data['0']['9'][0] = '0'; | |
| data['0']['9'][1] = '9'; | |
| data['1']['0'][0] = '0'; | |
| data['1']['0'][1] = '1'; | |
| data['1']['1'][0] = '0'; | |
| data['1']['1'][1] = '2'; | |
| data['1']['2'][0] = '0'; | |
| data['1']['2'][1] = '3'; | |
| data['1']['3'][0] = '0'; | |
| data['1']['3'][1] = '4'; | |
| data['1']['4'][0] = '0'; | |
| data['1']['4'][1] = '5'; | |
| data['1']['5'][0] = '0'; | |
| data['1']['5'][1] = '6'; | |
| data['1']['6'][0] = '0'; | |
| data['1']['6'][1] = '7'; | |
| data['1']['7'][0] = '0'; | |
| data['1']['7'][1] = '8'; | |
| data['1']['8'][0] = '0'; | |
| data['1']['8'][1] = '9'; | |
| data['1']['9'][0] = '1'; | |
| data['1']['9'][1] = '0'; | |
| data['2']['0'][0] = '0'; | |
| data['2']['0'][1] = '2'; | |
| data['2']['1'][0] = '0'; | |
| data['2']['1'][1] = '3'; | |
| data['2']['2'][0] = '0'; | |
| data['2']['2'][1] = '4'; | |
| data['2']['3'][0] = '0'; | |
| data['2']['3'][1] = '5'; | |
| data['2']['4'][0] = '0'; | |
| data['2']['4'][1] = '6'; | |
| data['2']['5'][0] = '0'; | |
| data['2']['5'][1] = '7'; | |
| data['2']['6'][0] = '0'; | |
| data['2']['6'][1] = '8'; | |
| data['2']['7'][0] = '0'; | |
| data['2']['7'][1] = '9'; | |
| data['2']['8'][0] = '1'; | |
| data['2']['8'][1] = '0'; | |
| data['2']['9'][0] = '1'; | |
| data['2']['9'][1] = '1'; | |
| data['3']['0'][0] = '0'; | |
| data['3']['0'][1] = '3'; | |
| data['3']['1'][0] = '0'; | |
| data['3']['1'][1] = '4'; | |
| data['3']['2'][0] = '0'; | |
| data['3']['2'][1] = '5'; | |
| data['3']['3'][0] = '0'; | |
| data['3']['3'][1] = '6'; | |
| data['3']['4'][0] = '0'; | |
| data['3']['4'][1] = '7'; | |
| data['3']['5'][0] = '0'; | |
| data['3']['5'][1] = '8'; | |
| data['3']['6'][0] = '0'; | |
| data['3']['6'][1] = '9'; | |
| data['3']['7'][0] = '1'; | |
| data['3']['7'][1] = '0'; | |
| data['3']['8'][0] = '1'; | |
| data['3']['8'][1] = '1'; | |
| data['3']['9'][0] = '1'; | |
| data['3']['9'][1] = '2'; | |
| data['4']['0'][0] = '0'; | |
| data['4']['0'][1] = '4'; | |
| data['4']['1'][0] = '0'; | |
| data['4']['1'][1] = '5'; | |
| data['4']['2'][0] = '0'; | |
| data['4']['2'][1] = '6'; | |
| data['4']['3'][0] = '0'; | |
| data['4']['3'][1] = '7'; | |
| data['4']['4'][0] = '0'; | |
| data['4']['4'][1] = '8'; | |
| data['4']['5'][0] = '0'; | |
| data['4']['5'][1] = '9'; | |
| data['4']['6'][0] = '1'; | |
| data['4']['6'][1] = '0'; | |
| data['4']['7'][0] = '1'; | |
| data['4']['7'][1] = '1'; | |
| data['4']['8'][0] = '1'; | |
| data['4']['8'][1] = '2'; | |
| data['4']['9'][0] = '1'; | |
| data['4']['9'][1] = '3'; | |
| data['5']['0'][0] = '0'; | |
| data['5']['0'][1] = '5'; | |
| data['5']['1'][0] = '0'; | |
| data['5']['1'][1] = '6'; | |
| data['5']['2'][0] = '0'; | |
| data['5']['2'][1] = '7'; | |
| data['5']['3'][0] = '0'; | |
| data['5']['3'][1] = '8'; | |
| data['5']['4'][0] = '0'; | |
| data['5']['4'][1] = '9'; | |
| data['5']['5'][0] = '1'; | |
| data['5']['5'][1] = '0'; | |
| data['5']['6'][0] = '1'; | |
| data['5']['6'][1] = '1'; | |
| data['5']['7'][0] = '1'; | |
| data['5']['7'][1] = '2'; | |
| data['5']['8'][0] = '1'; | |
| data['5']['8'][1] = '3'; | |
| data['5']['9'][0] = '1'; | |
| data['5']['9'][1] = '4'; | |
| data['6']['0'][0] = '0'; | |
| data['6']['0'][1] = '6'; | |
| data['6']['1'][0] = '0'; | |
| data['6']['1'][1] = '7'; | |
| data['6']['2'][0] = '0'; | |
| data['6']['2'][1] = '8'; | |
| data['6']['3'][0] = '0'; | |
| data['6']['3'][1] = '9'; | |
| data['6']['4'][0] = '1'; | |
| data['6']['4'][1] = '0'; | |
| data['6']['5'][0] = '1'; | |
| data['6']['5'][1] = '1'; | |
| data['6']['6'][0] = '1'; | |
| data['6']['6'][1] = '2'; | |
| data['6']['7'][0] = '1'; | |
| data['6']['7'][1] = '3'; | |
| data['6']['8'][0] = '1'; | |
| data['6']['8'][1] = '4'; | |
| data['6']['9'][0] = '1'; | |
| data['6']['9'][1] = '5'; | |
| data['7']['0'][0] = '0'; | |
| data['7']['0'][1] = '7'; | |
| data['7']['1'][0] = '0'; | |
| data['7']['1'][1] = '8'; | |
| data['7']['2'][0] = '0'; | |
| data['7']['2'][1] = '9'; | |
| data['7']['3'][0] = '1'; | |
| data['7']['3'][1] = '0'; | |
| data['7']['4'][0] = '1'; | |
| data['7']['4'][1] = '1'; | |
| data['7']['5'][0] = '1'; | |
| data['7']['5'][1] = '2'; | |
| data['7']['6'][0] = '1'; | |
| data['7']['6'][1] = '3'; | |
| data['7']['7'][0] = '1'; | |
| data['7']['7'][1] = '4'; | |
| data['7']['8'][0] = '1'; | |
| data['7']['8'][1] = '5'; | |
| data['7']['9'][0] = '1'; | |
| data['7']['9'][1] = '6'; | |
| data['8']['0'][0] = '0'; | |
| data['8']['0'][1] = '8'; | |
| data['8']['1'][0] = '0'; | |
| data['8']['1'][1] = '9'; | |
| data['8']['2'][0] = '1'; | |
| data['8']['2'][1] = '0'; | |
| data['8']['3'][0] = '1'; | |
| data['8']['3'][1] = '1'; | |
| data['8']['4'][0] = '1'; | |
| data['8']['4'][1] = '2'; | |
| data['8']['5'][0] = '1'; | |
| data['8']['5'][1] = '3'; | |
| data['8']['6'][0] = '1'; | |
| data['8']['6'][1] = '4'; | |
| data['8']['7'][0] = '1'; | |
| data['8']['7'][1] = '5'; | |
| data['8']['8'][0] = '1'; | |
| data['8']['8'][1] = '6'; | |
| data['8']['9'][0] = '1'; | |
| data['8']['9'][1] = '7'; | |
| data['9']['0'][0] = '0'; | |
| data['9']['0'][1] = '9'; | |
| data['9']['1'][0] = '1'; | |
| data['9']['1'][1] = '0'; | |
| data['9']['2'][0] = '1'; | |
| data['9']['2'][1] = '1'; | |
| data['9']['3'][0] = '1'; | |
| data['9']['3'][1] = '2'; | |
| data['9']['4'][0] = '1'; | |
| data['9']['4'][1] = '3'; | |
| data['9']['5'][0] = '1'; | |
| data['9']['5'][1] = '4'; | |
| data['9']['6'][0] = '1'; | |
| data['9']['6'][1] = '5'; | |
| data['9']['7'][0] = '1'; | |
| data['9']['7'][1] = '6'; | |
| data['9']['8'][0] = '1'; | |
| data['9']['8'][1] = '7'; | |
| data['9']['9'][0] = '1'; | |
| data['9']['9'][1] = '8'; | |
| } | |
| int max(int a, int b){ | |
| return (a > b)? a: b; | |
| } | |
| int main(int argc, char **argv){ | |
| init(); | |
| string a, b, t = "", r =""; | |
| std::cin >> a >> b; | |
| int i; | |
| int la = a.length(); | |
| int lb = b.length(); | |
| int l = max(la, lb); | |
| for(i=la-1; i>=0; i--) | |
| t.push_back(a[i]); | |
| a = t; | |
| t.clear(); | |
| for(i=lb-1; i>=0; i--) | |
| t.push_back(b[i]); | |
| b = t; | |
| char n, m, v; | |
| bool add = false; | |
| for(i=0; i<l; i++){ | |
| if(i >= la) | |
| m = '0'; | |
| else | |
| m = a[i]; | |
| if(i >= lb) | |
| n = '0'; | |
| else | |
| n = b[i]; | |
| v = data[n][m][1]; | |
| if(add){ | |
| if(data[v]['1'][0] == '1') | |
| add = true; | |
| else | |
| add = false; | |
| v = data[v]['1'][1]; | |
| } | |
| if(!add) | |
| add = (data[n][m][0] == '1'); | |
| /* | |
| std::cout << "m=" << m << " n=" << n << '\n'; | |
| std::cout << "v=" << v << '\n'; | |
| if(add) | |
| std::cout << "add=true\n"; | |
| else | |
| std::cout << "add=false\n"; | |
| */ | |
| r.push_back(v); | |
| } | |
| if(add) | |
| r.push_back('1'); | |
| int lr = r.length(); | |
| for(i=lr-1; i>=0; i--) | |
| std::cout << r[i]; | |
| std::cout << '\n'; | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <string> | |
| #include <vector> | |
| using std::string; | |
| using std::vector; | |
| int main(int argc, char **argv){ | |
| string a, b; | |
| std::cin >> a >> b; | |
| int la = a.size(); | |
| int lb = b.size(); | |
| std::vector<int> m, n, r; | |
| int i; | |
| for(i=la-1; i>=0; i--) | |
| m.push_back(a[i]-'0'); | |
| for(i=lb-1; i>=0; i--) | |
| n.push_back(b[i]-'0'); | |
| int x, y, add = 0, l = (la > lb)? la: lb; | |
| for(i=0; i<l; i++){ | |
| x = (i < la)? m[i]: 0; | |
| y = (i < lb)? n[i]: 0; | |
| r.push_back((x+y+add) % 10); | |
| add = (x+y+add) / 10; | |
| } | |
| if(add == 1) | |
| r.push_back(1); | |
| int lr = r.size(); | |
| for(i=lr-1; i>=0; i--){ | |
| std::cout << r[i]; | |
| } | |
| std::cout << "\n"; | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment