Moderator: Board moderators
14
123123 12313213213
11111111 111111111111
565656565656 45646546
1 1
232 2323
123 13
1233333333333 123333333333
123123 1323333333
12333333333333 123333333333333
11 11
12 12
15 15
10 10
01 01
24625513213
222222221111
912122036656
2
4643
253
2466666666663
2554563333
246666666666663
22
24
201
20
2

#include <stdio.h>
#include <string.h>
class BigNum {
private:
enum { DigitSize = 1024 };
char number[DigitSize];
int size;
public:
BigNum () {
Clean();
}
inline void Clean(){
size = 0;
for (int i = 0;i < DigitSize;i ++){
number[i] = 0;
}
}
void SetNum(char *str){
size = strlen(str);
for (int i = 0; i < size; i++) {
number[i] = str[size-i-1] - '0';
}
}
friend BigNum& operator+(const BigNum& a,const BigNum& b);
void Print(){
int i;
int flag = 0;
for(i = size ; i >= 0 ; i--){
if (number[i] != 0 || flag == 1)
printf("%d",number[i]);
if (number[i] != 0 )
flag = 1;
}
if (flag == 0 )
printf("0");
}
void Reverse(){
char num[DigitSize];
int i;
for (i = 0;i < size ;i++){
num[i] = number[size-i-1];
}
for (i = 0 ; i < size ; i++){
number[i] = num[i];
}
}
void ReSize(){
int i,sz;
for(i = size; i >= 0;i--){
if (number[i] != 0) break;
}
size = i+1;
}
};
BigNum& operator+(const BigNum& a,const BigNum& b) {
int i;
int sizeMax;
int flag;
static BigNum num ;
num.Clean();
sizeMax = (a.size >= b.size) ? a.size : b.size;
for (i = flag = 0; i < sizeMax; i++){
num.number[i] = a.number[i] + b.number[i] + flag ;
if (num.number[i] >= 10){
num.number[i] -= 10;
flag = 1;
} else
flag = 0;
}
if (flag == 1){
num.size = sizeMax + 1;
num.number[i] = flag;
}
else
num.size = sizeMax;
return num;
}
int main(){
char in1[1024],in2[1024];
while(scanf(" %s%s",in1,in2) != EOF){
BigNum aa,bb,cc;
aa.SetNum(in1);
bb.SetNum(in2);
aa.ReSize();
bb.ReSize();
aa.Reverse();
bb.Reverse();
cc = aa + bb;
cc.ReSize();
cc.Reverse();
cc.Print();
printf("\n");
}
return 0;
}

Users browsing this forum: No registered users and 0 guests