| r267 vs r268 | ||
|---|---|---|
| ... | ... | |
| 357 | 357 | 여기까지가 덧셈 또는 뺄셈연산의 계산과정이며 과정은 이후 rb 정리 과정으로 넘어갑니다. |
| 358 | 358 | }}}}}} |
| 359 | 359 | |
| 360 | ##== 곱셈 & 나눗셈 == | |
| 361 | ##=== 숫자 초기화 === | |
| 360 | 362 | {{{#!if (f=="*")||(f=="/") |
| 361 | 363 | 곱셈 및 나눗셈 연산과정을 봅니다. |
| 362 | 364 | 18자리 숫자로 입력할 수 있는 최대 정수는 999,999,999,999,999,999입니다. |
| ... | ... | |
| 378 | 380 | {{{#!if au=+au, au=au.toString(), bu=+bu, bu=bu.toString() |
| 379 | 381 | }}} |
| 380 | 382 | |
| 383 | ##=== 자릿수 측정 === | |
| 384 | 나누는 자릿수에 맞춰 결과를 표시하고자 ac, bc를 자릿수를 나타내는 값으로 정의합니다. | |
| 385 | 먼저 au는 앞에 적어놓은 0을 제거한 문자열이므로 +au>0인 경우 ac를 au의 문자열 길이에서 1을 뺀 값으로 정의합니다. | |
| 386 | {{{#!if +au>0 | |
| 387 | {{{#!if ac=au.length-1 | |
| 388 | }}}}}} | |
| 389 | (au, ab 둘다 0인 경우 앞에 처리하는 식이 있으며) au가 0이라면 ab는 0보다 크며, 소수점 아래 처음으로 0이 아닌 수가 나오는 자릿수를 고른 다음 덧셈 연산에서 그 수의 역원이 되는 수를 ac로 정의합니다. 이를 구하고자 뒤에 0을 더 붙여 18자리 숫자로 만든 다음 정수로 바꾸어 구합니다. | |
| 390 | {{{#!if +au==0 | |
| 391 | {{{#!if ac=ab+pd, ac=ac.substr(0,18), ac=+ac, ac=ac.toString(), ac=ac.length-19 | |
| 392 | }}}}}} | |
| 381 | 393 | |
| 394 | bc도 a와 같은 방법으로 정의합니다. | |
| 395 | {{{#!if +bu>0 | |
| 396 | {{{#!if bc=bu.length-1 | |
| 397 | }}}}}}{{{#!if +bu==0 | |
| 398 | {{{#!if bc=bb+pd, bc=bc.substr(0,18), bc=+bc, bc=bc.toString(), bc=bc.length-19 | |
| 399 | }}}}}} | |
| 400 | ||
| 401 | ##=== 0인자 처리 === | |
| 382 | 402 | a 또는 b값이 0이 되려면 au, ab 둘 다 0이 되거나 bu, bb 둘 다 0이 되어야 합니다. a 또는 b 값이 0일 경우 당연히 음수 부호가 표시되지 않습니다. |
| 383 | 403 | {{{#!if ((+au==0)&&(+ab==0))||((+bu==0)&&(+bb==0)) |
| 384 | 404 | 곱셈에서 0을 곱하면 0이 되므로, 곱셈의 경우 a 또는 b가 0이 될 때 계산 결과에 0을 반환합니다. |
| ... | ... | |
| 399 | 419 | 곱셈과 나눗셈에서 a와 b 모두 0이 아닌 경우를 봅니다. |
| 400 | 420 | {{{#!if ((+au!=0)||(+ab!=0))&&((+bu!=0)||(+bb!=0)) |
| 401 | 421 | |
| 422 | ##=== 곱셈 === | |
| 402 | 423 | {{{#!if f=="*" |
| 403 | 424 | 곱셈계산에서 18자리씩 곱셈을 할 수 있도록 입력했던 a와 b의 문자열을 확장할 것입니다. |
| 404 | 425 | |
| ... | ... | |
| 1434 | 1455 | |
| 1435 | 1456 | au, ab, bu, bb를 18자로 만들었으므로 36자리 정수의 나눗셈으로 봅니다. |
| 1436 | 1457 | a/b=(au+ab)/(bu+bb)=(+(au.substr(0,18)+ab.substr(0,18)))/(+(bu.substr(0,18)+bb.substr(0,18)))와 같습니다. |
| 1437 | ## 자릿수 측정 | |
| 1438 | 나누는 자릿수에 맞춰 결과를 표시하고자 ac, bc를 자릿수를 나타내는 값으로 정의합니다. | |
| 1439 | 먼저 au는 앞에 적어놓은 0을 제거한 문자열이므로 +au>0인 경우 ac를 au의 문자열 길이에서 1을 뺀 값으로 정의합니다. | |
| 1440 | {{{#!if +au>0 | |
| 1441 | {{{#!if ac=au.length-1 | |
| 1442 | }}}}}} | |
| 1443 | (au, ab 둘다 0인 경우 앞에 처리하는 식이 있으며) au가 0이라면 ab는 0보다 크며, 소수점 아래 처음으로 0이 아닌 수가 나오는 자릿수를 고른 다음 덧셈 연산에서 그 수의 역원이 되는 수를 ac로 정의합니다. 이를 구하고자 뒤에 0을 더 붙여 18자리 숫자로 만든 다음 정수로 바꾸어 구합니다. | |
| 1444 | {{{#!if +au==0 | |
| 1445 | {{{#!if ac=ab+pd, ac=ac.substr(0,18), ac=+ac, ac=ac.toString(), ac=ac.length-19 | |
| 1446 | }}}}}} | |
| 1447 | 1458 | |
| 1448 | bc도 a와 같은 방법으로 정의합니다. | |
| 1449 | {{{#!if +bu>0 | |
| 1450 | {{{#!if bc=bu.length-1 | |
| 1451 | }}}}}}{{{#!if +bu==0 | |
| 1452 | {{{#!if bc=bb+pd, bc=bc.substr(0,18), bc=+bc, bc=bc.toString(), bc=bc.length-19 | |
| 1453 | }}}}}} | |
| 1454 | ||
| 1455 | ||
| 1456 | ##자릿수 기억 (이후에 서술) | |
| 1457 | 1459 | ##몫 서술 |
| 1458 | 1460 | 제일 높은 자리부터 내려오면서 처음으로 0이 아닌 수를 왼쪽으로 당기는 과정을 거쳤으므로 (1부터 시작하는 18자리+18자리 숫자)/(1부터 시작하는 18자리+18자리 수) 연산이 됩니다. |
| 1459 | 1461 | |
| ... | ... |