-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoj1137.cpp
123 lines (120 loc) · 2.29 KB
/
oj1137.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>
#include <string.h>
struct bigFloat{
int intNum[100];
int floatNum[100];
int intSize;
int floatSize;
void init(){
for(int i=0;i<100;i++){
intNum[i]=0;
floatNum[i]=0;
}
intSize=0;
floatSize=0;
return;
}
void set(char a[]){
init();
int len=strlen(a);
int point=0;
while(a[point]!='.') point++;
bool floatFlag=true;
for(int i=point-1,w=1,f=0,tmp=0;i>=0;i--){
tmp+=(a[i]-'0')*w;
w*=10;
f++;
if(f>3||i==0){
intNum[intSize++]=tmp;
tmp=0;
w=1;
f=0;
}
}
for(int i=point+1,w=1000,f=0,tmp=0;i<len;i++){
tmp+=(a[i]-'0')*w;
w/=10;
f++;
if(f>3||i==len-1){
floatNum[floatSize++]=tmp;
tmp=0;
w=1000;
f=0;
}
}
return;
}
void outPut(){
for(int i=intSize-1;i>=0;i--){
if(i!=intSize-1)
printf("%04d",intNum[i]);
else printf("%d",intNum[i]);
}
printf(".");
for(int i=0;i<floatSize;i++)
if(i!=floatSize-1)
printf("%04d",floatNum[i]);
else{
int temp=4;
while(floatNum[i]%10==0&&floatNum[i]!=0)
{
floatNum[i]/=10;
temp--;
}
if(!floatNum[i])
temp=1;
switch(temp){
case 4:
printf("%04d\n",floatNum[i]);
break;
case 3:
printf("%03d\n",floatNum[i]);
break;
case 2:
printf("%02d\n",floatNum[i]);
break;
case 1:
printf("%d\n",floatNum[i]);
break;
default:
break;
}
}
return;
}
bigFloat operator +(const bigFloat &A) const{
bigFloat ans;
ans.init();
int carry=0;
ans.floatSize=floatSize>=A.floatSize?floatSize:A.floatSize;
for(int i=ans.floatSize-1;i>=0;i--){
ans.floatNum[i]=floatNum[i]+A.floatNum[i]+carry;
carry=ans.floatNum[i]/10000;
ans.floatNum[i]%=10000;
}
while(!ans.floatNum[ans.floatSize-1]&&ans.floatSize>1)
ans.floatSize--;
for(int i=0;i<intSize||i<A.intSize;i++){
ans.intNum[i]=intNum[i]+A.intNum[i]+carry;
carry=ans.intNum[i]/10000;
ans.intNum[ans.intSize++]%=10000;
}
if(carry)
ans.intNum[ans.intSize++]=carry;
return ans;
}
}a,b,c;
char str1[102],str2[102];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%s%s",str1,str2);
a.set(str1);
b.set(str2);
c=a+b;
c.outPut();
}
}
return 0;
}