| r248 vs r249 | ||
|---|---|---|
| ... | ... | |
| 1544 | 1544 | ##i=1 part 1 |
| 1545 | 1545 | 몫으로 기록할 숫자의 첫번째 자리를 구했다면, 그 다음 자리의 숫자를 찾기 위해 (변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다. |
| 1546 | 1546 | |
| 1547 | au와 ab를 정수로 다시 바 | |
| 1548 | {{{#!if au=+au, ab=+ab, tn!="" | |
| 1547 | au와 ab를 정수로 다시 바꾸고 tz를 0으로 초기화합니다. 그리고 tn이 빈 문자열이 아니라면 (앞에 au에서 한 자리 수를 떼온 것이므로) tn에 0을 더하여 19자리로 만들고 몫을 구합니다. | |
| 1548 | {{{#!if au=+au, ab=+ab, tz=0, tn!="" | |
| 1549 | 1549 | tn을 19자리 정수로 바꿉니다. |
| 1550 | 1550 | {{{#!if tn+=pd, tn=+tn, |
| 1551 | 1551 | }}} |
| ... | ... | |
| 1578 | 1578 | {{{#!if !br |
| 1579 | 1579 | ps를 false로 초기화한 다음 앞에서 했던 처리와 동일하게 진행합니다. |
| 1580 | 1580 | {{{#if ps=false, ts=((au<bu)||((au==bu)&&(ab<bb))), ts |
| 1581 | ts일 경우 ps | |
| 1582 | {{{#if ps=true | |
| 1583 | ||
| 1584 | ||
| 1581 | ts일 경우 ps를 true로 바꾸며, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다. | |
| 1582 | {{{#if ps=true, tm+="0" | |
| 1585 | 1583 | }}}}}} |
| 1586 | {{{#!if !ts | |
| 1584 | {{{#!if !ts&!ps | |
| 1587 | 1585 | tw, tx, ty를 정의하고 처리하는 과정은 앞자리에서 몫을 찾는 과정과 동일합니다. 앞에서 이미 au, ab를 정수로 만들었으므로 여기에 au, ab를 정수로 만드는 처리를 할 필요가 없습니다. |
| 1588 | 1586 | {{{#!if tw=au/bu, tx=bu*tw, ty=bb*tw |
| 1589 | }}}{{{#!if ty=ty.toString(), ty.length | |
| 1590 | ||
| 1587 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1588 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1589 | }}}}}} | |
| 1590 | ty를 정수로 바꾸는 과정을 아래 if 조건문으로 병합합니다. | |
| 1591 | {{{#!if ty=+ty, (tx>au)||((tx==au)&&(ty>ab)) | |
| 1592 | {{{#!if tw-=1, tx=bu*tw, ty=bb*tw | |
| 1593 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1594 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1595 | }}}}}}{{{#!if ty=+ty | |
| 1596 | }}}}}} | |
| 1597 | 앞에 tz 값을 구했다면 tw에 tz를 더한 다음 문자열로 바꿉니다. 그리고 tm에 바꾼 tm을 더합니다. | |
| 1598 | {{{#!if tw+=tz, tw=tw.toString(), tm+=tw | |
| 1599 | }}}{{{#!if ty>ab | |
| 1600 | {{{#!if au-=1, ab+=+("1"+pd) | |
| 1601 | }}}}}}{{{#!if au-=tx, ab-=ty | |
| 1591 | 1602 | }}} |
| 1603 | ts를 au와 ab가 모두 0이 되는 조건으로 다시 정의합니다. | |
| 1604 | {{{#!if ts=((au==0)&&(ab==0)), ts | |
| 1605 | {{{#!if br=true, ps=true | |
| 1606 | }}}}}}}}} | |
| 1607 | 어느 자릿수부터 br가 true로 되면 이후 자릿수 옮겨 몫을 구하는 과정이나 나머지를 정리하는 과정을 더 이상 할 필요가 없습니다. | |
| 1608 | {{{#!if !ts | |
| 1609 | au, ab를 문자열로 다시 바꾸고 처리하는 과정은 동일합니다. | |
| 1610 | {{{#!if au=au.toString(), ab=ab.toString() | |
| 1592 | 1611 | }}} |
| 1612 | ps를 au 자릿수가 18가 되었을 때 true가 되는 논리값으로 정의합니다. | |
| 1613 | {{{#!if tn="", ps=(au.length==18), ps | |
| 1614 | {{{#!if tn=au.substr(0,1), au=substr(1,17) | |
| 1615 | }}}}}} | |
| 1616 | {{{#!if !ps&&(au.length<17) | |
| 1617 | {{{#!if au=pd+au, au=au.substr(au.length-17,17) | |
| 1618 | }}}}}} | |
| 1619 | {{{#!if ab.length<18 | |
| 1620 | {{{#!if ab=pd+ab, ab=ab.substr(ab.length-18,18) | |
| 1621 | }}}}}} | |
| 1622 | {{{#!if au+=ab.substr(0,1), ab=ab.substr(1,17)+"0" | |
| 1593 | 1623 | }}} |
| 1624 | }}} | |
| 1625 | }}} | |
| 1626 | ##i=2 | |
| 1627 | 이후부터 과정은 동일합니다. | |
| 1628 | {{{#!if au=+au, ab=+ab, tz=0, !br&&(tn!="") | |
| 1629 | {{{#!if tn+=pd, tn=+tn, tz=tn/bu, tx=bu*tz, ty=bb*tz | |
| 1630 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1631 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1632 | }}}}}} | |
| 1633 | {{{#!if ty=+ty, (tx>tn)||((tx==tn)&&(ty>0)) | |
| 1634 | {{{#!if tz-=1, tx=bu*tz, ty=bb*tz | |
| 1635 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1636 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1637 | }}}}}}{{{#!if ty=+ty | |
| 1638 | }}}}}} | |
| 1639 | {{{#!if ty>ab | |
| 1640 | {{{#!if tn-=1, ab+=+("1"+pd) | |
| 1641 | }}}}}}{{{#!if au+=(tn-tx), ab-=ty, tn="" | |
| 1642 | }}} | |
| 1643 | }}} | |
| 1594 | 1644 | |
| 1595 | 1645 | |
| 1596 | ||
| 1597 | 1646 | ##rs 매기기 |
| 1598 | 1647 | |
| 1599 | 1648 | ##ru 매기기 |
| ... | ... |