| r249 vs r250 | ||
|---|---|---|
| ... | ... | |
| 1465 | 1465 | {{{#!if au=+au, ab=+bb, bu=+bu, bb=+bb |
| 1466 | 1466 | }}} |
| 1467 | 1467 | |
| 1468 | au의 값이 bu보다 작거나, au==bu이더라도 ab<bb이면 해당하는 자릿수의 몫이 0이라는 의미리므로 다음 자릿수로 넘깁니다. 이 과정에서 변수 | |
| 1469 | {{{#if | |
| 1468 | au의 값이 bu보다 작거나, au==bu이더라도 ab<bb이면 해당하는 자릿수의 몫이 0이라는 의미리므로 다음 자릿수로 넘깁니다. 이 과정에서 변수 ps(logical)를 false로 초기화한 다음 가져옵니다. | |
| 1469 | {{{#if ps=false, (au<bu)||((au==bu)&&(ab<bb)) | |
| 1470 | 1470 | {{{#if ps=true |
| 1471 | 1471 | }}}}}} |
| 1472 | 1472 | !ts이러면 ① au>bu이거나, ② au==bu이고 ab>=bb인 경우입니다. !ts이고 !ps(다음 자릿수로 계산을 넘기지 않음)임을 if 조건문으로 둔 상태에서 진행합니다. |
| 1473 | {{{#!if ! | |
| 1473 | {{{#!if !ps | |
| 1474 | 1474 | au를 bu로 나눈 몫을 tw로 정의합니다. 정수를 정수로 나누면 몫만 계산되며, 100,000,000,000,000,000 이상 999,999,999 999,999,999 이하의 한 정수를 100,000,000,000,000,000 이상의 다른 한 정수로 나눈 몫이므로 tw의 값은 최소 0 최대 9가 됩니다. |
| 1475 | 1475 | {{{#!if tw=au/bu |
| 1476 | 1476 | }}} |
| ... | ... | |
| 1514 | 1514 | {{{#!if au-=tx, ab-=ty |
| 1515 | 1515 | }}}}}} |
| 1516 | 1516 | |
| 1517 | au, ab에서 몫을 빼고 나니 au, ab가 모두 0으로 된다면 더 이상 계산을 하지 않아야 하므로 br를 true로 반환합니다. | |
| 1518 | {{{#!if | |
| 1517 | au, ab에서 몫을 빼고 나니 au, ab가 모두 0으로 된다면 더 이상 계산을 하지 않아야 하므로 br를 true로 반환합니다. | |
| 1518 | {{{#!if (au==0)&&(ab==0) | |
| 1519 | 1519 | {{{#!if br=true |
| 1520 | 1520 | }}}}}} |
| 1521 | 어느 하나가 0이 되지 않는다면 자릿수를 옮깁니다. | |
| 1522 | {{{#!if ! | |
| 1521 | 어느 하나가 0이 되지 않는다면 br는 여전히 false이므로 !br일 때 자릿수를 옮깁니다. | |
| 1522 | {{{#!if !br | |
| 1523 | 1523 | au, ab를 문자열로 다시 바꿉니다. |
| 1524 | 1524 | {{{#!if au=au.toString(), ab=ab.toString() |
| 1525 | 1525 | }}} |
| ... | ... | |
| 1540 | 1540 | }}} |
| 1541 | 1541 | ab의 나머지 17자리를 앞으로 당긴 다음 "0"을 더합니다. |
| 1542 | 1542 | {{{#!if ab=ab.substr(1,17)+"0" |
| 1543 | }}}}}} | |
| 1543 | }}} | |
| 1544 | 여기까지가 자릿수를 한 칸씩 옮기는 과정입니다. | |
| 1545 | }}} | |
| 1544 | 1546 | ##i=1 part 1 |
| 1545 | 1547 | 몫으로 기록할 숫자의 첫번째 자리를 구했다면, 그 다음 자리의 숫자를 찾기 위해 (변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다. |
| 1546 | 1548 | |
| ... | ... | |
| 1577 | 1579 | br(0으로 나누어떨어짐) 이 걸려있으면 실행하지 않습니다. 그러므로 전체적으로 조건을 !br로 둔 다음 계산을 진행합니다. |
| 1578 | 1580 | {{{#!if !br |
| 1579 | 1581 | ps를 false로 초기화한 다음 앞에서 했던 처리와 동일하게 진행합니다. |
| 1580 | {{{#if ps=false, | |
| 1582 | {{{#if ps=false, (au<bu)||((au==bu)&&(ab<bb)) | |
| 1581 | 1583 | ts일 경우 ps를 true로 바꾸며, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다. |
| 1582 | 1584 | {{{#if ps=true, tm+="0" |
| 1583 | 1585 | }}}}}} |
| 1584 | {{{#!if ! | |
| 1586 | {{{#!if !ps | |
| 1585 | 1587 | tw, tx, ty를 정의하고 처리하는 과정은 앞자리에서 몫을 찾는 과정과 동일합니다. 앞에서 이미 au, ab를 정수로 만들었으므로 여기에 au, ab를 정수로 만드는 처리를 할 필요가 없습니다. |
| 1586 | 1588 | {{{#!if tw=au/bu, tx=bu*tw, ty=bb*tw |
| 1587 | 1589 | }}}{{{#!if ty=ty.toString(), ty.length==19 |
| ... | ... | |
| 1601 | 1603 | }}}}}}{{{#!if au-=tx, ab-=ty |
| 1602 | 1604 | }}} |
| 1603 | 1605 | ts를 au와 ab가 모두 0이 되는 조건으로 다시 정의합니다. |
| 1604 | {{{#!if | |
| 1605 | {{{#!if br=true | |
| 1606 | {{{#!if (au==0)&&(ab==0) | |
| 1607 | {{{#!if br=true | |
| 1606 | 1608 | }}}}}}}}} |
| 1607 | 1609 | 어느 자릿수부터 br가 true로 되면 이후 자릿수 옮겨 몫을 구하는 과정이나 나머지를 정리하는 과정을 더 이상 할 필요가 없습니다. |
| 1608 | {{{#!if ! | |
| 1610 | {{{#!if !br | |
| 1609 | 1611 | au, ab를 문자열로 다시 바꾸고 처리하는 과정은 동일합니다. |
| 1610 | 1612 | {{{#!if au=au.toString(), ab=ab.toString() |
| 1611 | 1613 | }}} |
| ... | ... | |
| 1639 | 1641 | {{{#!if ty>ab |
| 1640 | 1642 | {{{#!if tn-=1, ab+=+("1"+pd) |
| 1641 | 1643 | }}}}}}{{{#!if au+=(tn-tx), ab-=ty, tn="" |
| 1644 | }}}}}} | |
| 1645 | {{{#!if !br | |
| 1646 | {{{#if ps=false, (au<bu)||((au==bu)&&(ab<bb)) | |
| 1647 | {{{#if ps=true, tm+="0" | |
| 1648 | }}}}}} | |
| 1649 | {{{#!if !ps | |
| 1650 | {{{#!if tw=au/bu, tx=bu*tw, ty=bb*tw | |
| 1651 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1652 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1653 | }}}}}} | |
| 1654 | {{{#!if ty=+ty, (tx>au)||((tx==au)&&(ty>ab)) | |
| 1655 | {{{#!if tw-=1, tx=bu*tw, ty=bb*tw | |
| 1656 | }}}{{{#!if ty=ty.toString(), ty.length==19 | |
| 1657 | {{{#!if tx+=+(ty.substr(0,1)), ty=ty.substr(1,18) | |
| 1658 | }}}}}}{{{#!if ty=+ty | |
| 1659 | }}}}}} | |
| 1660 | {{{#!if tw+=tz, tw=tw.toString(), tm+=tw | |
| 1661 | }}}{{{#!if ty>ab | |
| 1662 | {{{#!if au-=1, ab+=+("1"+pd) | |
| 1663 | }}}}}}{{{#!if au-=tx, ab-=ty | |
| 1642 | 1664 | }}} |
| 1643 | }}} | |
| 1665 | {{{#!if (au==0)&&(ab==0) | |
| 1666 | {{{#!if br=true | |
| 1667 | }}}}}}}}} | |
| 1668 | {{{#!if !br | |
| 1669 | {{{#!if au=au.toString(), ab=ab.toString() | |
| 1670 | }}}{{{#!if tn="", ps=(au.length==18), ps | |
| 1671 | {{{#!if tn=au.substr(0,1), au=substr(1,17) | |
| 1672 | }}}}}}{{{#!if !ps&&(au.length<17) | |
| 1673 | {{{#!if au=pd+au, au=au.substr(au.length-17,17) | |
| 1674 | }}}}}}{{{#!if ab.length<18 | |
| 1675 | {{{#!if ab=pd+ab, ab=ab.substr(ab.length-18,18) | |
| 1676 | }}}}}}{{{#!if au+=ab.substr(0,1), ab=ab.substr(1,17)+"0" | |
| 1677 | }}}}}}}}} | |
| 1644 | 1678 | |
| 1645 | 1679 | |
| 1646 | 1680 | ##rs 매기기 |
| ... | ... |