#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <cassert>
#include <iterator>
#include <algorithm>
using namespace std;
class LargeInteger {
private:
static int nextLargeIntegerId;
int id;
string digits; // the digits of the LargeInt we are representing
public:
LargeInteger(int value);
~LargeInteger();
string tostring();
};
LargeInteger::LargeInteger(int value)
{
// set this instance id
id = nextLargeIntegerId++;
// iterate through the digits in value, putting them into our
// array of digits.
unsigned char digit;
while(value) {
// least significant digit
digit = value % 10;
digits += digit;
// integer division to chop of least significant digit
value = value / 10;
}
}
LargeInteger::~LargeInteger()
{
cout << " destructor entered, freeing my digits" << endl
<< " id = " << id << endl
//<< " value=" << tostring() // uncomment this after you implement tostring()
<< endl;
}
string LargeInteger::tostring()
{
string intValue(digits.size(),' ');
transform (digits.rbegin(), digits.rend(), intValue.begin(), [](auto &x){return x+'0'; }) ;
return intValue;
}
int LargeInteger::nextLargeIntegerId = 0;
int main() {
// test constructors, destructors and tostring()
cout << "Testing Constructors, tostring() and destructor:" << endl;
cout << "-------------------------------------------------------------" << endl;
LargeInteger li1(3483);
cout << "li1 = " << li1.tostring() << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIExhcmdlSW50ZWdlciB7CnByaXZhdGU6CiAgICBzdGF0aWMgaW50IG5leHRMYXJnZUludGVnZXJJZDsKICAgIGludCBpZDsKICAgIHN0cmluZyBkaWdpdHM7IC8vIHRoZSBkaWdpdHMgb2YgdGhlIExhcmdlSW50IHdlIGFyZSByZXByZXNlbnRpbmcKCnB1YmxpYzoKICAgIExhcmdlSW50ZWdlcihpbnQgdmFsdWUpOwogICAgfkxhcmdlSW50ZWdlcigpOwogICAgc3RyaW5nIHRvc3RyaW5nKCk7Cn07CgpMYXJnZUludGVnZXI6OkxhcmdlSW50ZWdlcihpbnQgdmFsdWUpCnsKICAgIC8vIHNldCB0aGlzIGluc3RhbmNlIGlkCiAgICBpZCA9IG5leHRMYXJnZUludGVnZXJJZCsrOwoKICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZGlnaXRzIGluIHZhbHVlLCBwdXR0aW5nIHRoZW0gaW50byBvdXIKICAgIC8vIGFycmF5IG9mIGRpZ2l0cy4KICAgIHVuc2lnbmVkIGNoYXIgZGlnaXQ7CiAgICB3aGlsZSh2YWx1ZSkgewogICAgICAgIC8vIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0CiAgICAgICAgZGlnaXQgPSB2YWx1ZSAlIDEwOwogICAgICAgIGRpZ2l0cyArPSBkaWdpdDsKCiAgICAgICAgLy8gaW50ZWdlciBkaXZpc2lvbiB0byBjaG9wIG9mIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0CiAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIDEwOwogICAgfQp9CgpMYXJnZUludGVnZXI6On5MYXJnZUludGVnZXIoKQp7CiAgICBjb3V0IDw8ICIgZGVzdHJ1Y3RvciBlbnRlcmVkLCBmcmVlaW5nIG15IGRpZ2l0cyIgPDwgZW5kbAogICAgICAgICA8PCAiIGlkID0gIiA8PCBpZCA8PCBlbmRsCiAgICAgICAgIC8vPDwgIiB2YWx1ZT0iIDw8IHRvc3RyaW5nKCkgLy8gdW5jb21tZW50IHRoaXMgYWZ0ZXIgeW91IGltcGxlbWVudCB0b3N0cmluZygpCiAgICAgICAgIDw8IGVuZGw7Cn0KCnN0cmluZyBMYXJnZUludGVnZXI6OnRvc3RyaW5nKCkKewogICAgc3RyaW5nIGludFZhbHVlKGRpZ2l0cy5zaXplKCksJyAnKTsKCiAgICB0cmFuc2Zvcm0gKGRpZ2l0cy5yYmVnaW4oKSwgZGlnaXRzLnJlbmQoKSwgaW50VmFsdWUuYmVnaW4oKSwgW10oYXV0byAmeCl7cmV0dXJuIHgrJzAnOyB9KSA7IAogICAgcmV0dXJuIGludFZhbHVlOwp9CmludCBMYXJnZUludGVnZXI6Om5leHRMYXJnZUludGVnZXJJZCA9IDA7IAoKaW50IG1haW4oKSB7CiAgICAvLyB0ZXN0IGNvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIHRvc3RyaW5nKCkKICAgIGNvdXQgPDwgIlRlc3RpbmcgQ29uc3RydWN0b3JzLCB0b3N0cmluZygpIGFuZCBkZXN0cnVjdG9yOiIgPDwgZW5kbDsKICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CiAgICBMYXJnZUludGVnZXIgbGkxKDM0ODMpOwogICAgY291dCA8PCAibGkxID0gIiA8PCBsaTEudG9zdHJpbmcoKSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9