-
Notifications
You must be signed in to change notification settings - Fork 0
/
BigNumber.cpp
63 lines (51 loc) · 1.33 KB
/
BigNumber.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <string>
#pragma warning(disable : 4996)
using namespace std;
class BigNumber
{
private:
char num[32];
public:
BigNumber(const char* n);
friend BigNumber& operator +(BigNumber& a, BigNumber& b);
friend ostream& operator <<(ostream& outputStream, const BigNumber& c);
};
BigNumber:: BigNumber(const char* n)
{
//strcpy(this->num, n);
int len = strlen(n);
for (int i = 0; i < 32; i++) {
if (i < len)
num[i] = n[len -1 - i];
else // 앞부분 0으로 채우기
num[i] = '0';
}
}
BigNumber& operator +(BigNumber& a,BigNumber& b) {
BigNumber c("0");
int carryout = 0;
for (int i = 0; i < 32; i++) {
c.num[i] = (((a.num[i] -'0') + (b.num[i] - '0') + carryout) % 10) + '0';
carryout = (((a.num[i] - '0') + (b.num[i] - '0') + carryout) / 10);
}
return c;
}
ostream& operator <<(ostream& output, const BigNumber& c) {
bool start = false;
for (int i = 31; i >= 0; i--) {
if (!start && c.num[i] > '0'){
start = true;
output << c.num[i];
}
else if (start) {
output << c.num[i]; //시작됐으면 계속 찍으면 된다.
}
}
return output;
}
int main() {
BigNumber a("1234567890");
BigNumber b("123456");
cout << (a + b) << endl;
}