#include #include #include "bignum.h" void read_sign(bool & sign){ char ch; // skip blank space do { cin.get(ch); } while (isspace(ch)); // if we have a + it is positive // if we have a - it is negative // otherwise put it back in the input stream. switch(ch) { case '+' : sign = true; break; case '-' : sign = false; break; default: sign = true; cin.unget(); } } void read_digits(int dig[], int & size) { int tmpin[MAXSIZE]; int i; char ch; cin.get(ch); i = 0; while (isdigit(ch) && (i < MAXSIZE)) { tmpin[i] = ch -'0'; cin.get(ch); i++; } // if we have exceeded the size, put the last one back. // also put it back if it is not a digit. if ((i == MAXSIZE) || !isdigit(ch)) { cin.unget(); } size = i; for(i=0; i < size; i++) { dig[i] = tmpin[size-(i+1)]; } } void read_bignum(BigNum & a){ read_sign(a.sign); read_digits(a.digits, a.length); } void print_sign(bool sign) { if (!sign) { cout << "-"; } } void print_digits(int dig[], int size) { int i; if(size == 0) { cout << 0; } else { for(i=size-1;i>=0;i--) { cout << dig[i]; } } } void print_bignum(BigNum a){ print_sign(a.sign); print_digits(a.digits,a.length); } void init_bignum(BigNum & a){ int i; a.sign = true; a.length = 0; for(i=0;i