Skip to content

Instantly share code, notes, and snippets.

@910JQK
Created March 21, 2015 15:03
Show Gist options
  • Save 910JQK/f320e72c4f57ff40479b to your computer and use it in GitHub Desktop.
Save 910JQK/f320e72c4f57ff40479b to your computer and use it in GitHub Desktop.
Arbitrary-precision arithmetic (testing source files)
#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;
}
#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