r198 vs r199
......
5050
5151
{{{#!if ((bu[0]!=45)&&(bu.length>=19))||((bu[0]==45)&&(bu.length>=20))
5252
error code of b 01번 : 오버플로
53
{{{#!if eb=01
53
{{{#!if eb=1
5454
}}}}}}
5555
{{{#!if bb.length>=19
5656
warning code of b 01번 : 소수점 아래 자릿수를 너무 많이 입력했습니다. 소수점 아래 18자리까지만 취급합니다.
57
{{{#!if wb=01, bb=bb.substr(0,18), bp=18
57
{{{#!if wb=1, bb=bb.substr(0,18), bp=18
5858
}}}}}}
5959
6060
##반점(,)을 자동적으로 생략하고 들어가는 것은 나중에 생각하겠습니다.
6161
error code 02 번 : 입력한 변수는 숫자로 읽을 수 없습니다. 반점(,)을 입력했다면 반점을 지우고 다시 입력하세요.
6262
63
error code 03 번 : 0으로 나눌 수 없습니다.(아래쪽 참고)
64
6365
덧셈과 뺄셈 계산과정을 적어봅니다.
6466
{{{#!if (f=="+")||(f=="-")
6567
......
268270
{{{#!if bu[0]==45
269271
{{{#!if bu=bu.substr(1,bd-1)
270272
}}}}}}
271
}}}
272273
273
{{{#!if f=="*"
274
여기까지 a,b를 정리하고 곱셈 연산을 먼저 봅니다.
275274
a 또는 b값이 0이 되려면 au, ab 둘 다 0이 되거나 bu, bb 둘 다 0이 되어야 합니다. a 또는 b 값이 0일 경우 당연히 음수 부호가 표시되지 않습니다.
276275
{{{#!if ((+au==0)&&(+ab==0))||((+bu==0)&&(+bb==0))
276
곱셈에서 0을 곱하면 0이 되므로, 곱셈의 경우 a 또는 b가 0이 될 때 계산 결과에 0을 반환합니다.
277
{{{#!if f=="*"
277278
{{{#!if rs="", ru="0", rb="", ri="", rp=0, ns=""
278279
}}}}}}
279
곱셈에서 0을 곱하 0 되므로, a와 b 모두 0이 아닌 값을 곱할 때를 봅니다.
280
나눗셈에서 나누는 수(b)가 0이 될 경우 오류를 반환하고 ps=true를 걸어 나눗셈 연산이 되지 않게 만듭니다.
281
{{{#!if f=="/"
282
{{{#!if ((+bu==0)&&(+bb==0))
283
error code 03 번 : 0으로 나눌 수 없습니다.
284
{{{#!if eb=03, ps=true
285
}}}}}}
286
나누는 수가 0이 아니면서 나눌 대상이 0이 될 경우 곱셈에서 0을 곱하 것처럼 계산 결과에 0 반환합니다.
287
{{{#!if ((+au==0)&&(+ab==0))&&((+bu!=0)||(+bb!=0))
288
{{{#!if rs="", ru="0", rb="", ri="", rp=0, ns=""
289
}}}}}}
290
}}}
291
a와 b 모두 0이 아닌 경우를 봅니다.
280292
{{{#!if ((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
281293
282294
18자리씩 곱셈계산을 할 수 있도록 입력했던 a와 b의 문자열을 확장할 것입니다.
......
298310
{{{#!if bb += "000000000000000000"
299311
+18자}}}{{{#!if bb=bb.substr(0,18)
300312
}}}
313
}}}
314
여기까지 곱셈 또는 나눗셈에서 숫자를 초기화하는 과정입니다.
315
}}}
301316
317
a와 b 모두 0이 아닌 경우에서 곱셈을 연산하는 과정입니다.
318
{{{#!if (f=="*")&&((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0))
302319
곱셈은 18자리를 끊어서 계산합니다. 소수점 아래 18자리의 아래인 제19~36번 자리를 ri로 둡니다. 소수점 위 19~36번째 자리는 rs로 두어 ri, rb, ru, rs 순으로 계산합니다.
303320
304321
앞으로 있을 계산은 다음과 같습니다.
......
12901307
}}}{{{#!if tw=(+au.substr(0,i))*(+bu.substr(17-i,1)), rs=rs+tw, i+=1
12911308
}}}{{{#!if tw=(+au.substr(0,i))*(+bu.substr(17-i,1)), rs=rs+tw, i+=1
12921309
}}}
1293
여기까지가 a*b 산과정니다.
1310
여기까지가 곱셈에서 a*b 의 연 과정이며 rb 정리 부분으로 넘어갑니다.
12941311
}}}
1295
여기까지가 곱셈의 연산 과정이며 rb 정리 부분으로 넘어갑니다.
1296
}}}
12971312
12981313
##ru 정리 부분
12991314
먼저 ru를 문자열로 변환합니다. 18자리씩 끊어 표기하므로 소수점 위 19~36번째 자리에 해당하는 rs값이 (곱한 값을 더했는데도) 0일 경우 rs를 빈 문자열로 바꿉니다. 곱셈과정에서 ru의 윗자리인 rs값이 0보다 클 경우, 1~18번째 자리인 ru에 빈 자리를 채우도록 ru의 왼쪽을 0으로 채웁니다.
......
13781393
13791394
rb 정리를 이것으로 종료합니다.
13801395
1381
error code 03 번 : 0으로 나눌 수 없습니다.
1382
13831396
아래 출력 변수 설명
13841397
'''sa''' : searching a; '''sb''' : searching b; '''sf''' : searching f;
13851398
'''rl''' : result string length to output; '''p''' : a point of string(s);
......