r248 vs r249
......
15441544
##i=1 part 1
15451545
몫으로 기록할 숫자의 첫번째 자리를 구했다면, 그 다음 자리의 숫자를 찾기 위해 (변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다.
15461546
1547
au와 ab를 정수로 다시 바니다. 그리고 tn이 빈 문자열이 아니라면 (앞에 au에서 한 자리 수를 떼온 것이므로) tn에 0을 더하여 19자리로 만들고 몫을 구합니다.
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!=""
15491549
tn을 19자리 정수로 바꿉니다.
15501550
{{{#!if tn+=pd, tn=+tn,
15511551
}}}
......
15781578
{{{#!if !br
15791579
ps를 false로 초기화한 다음 앞에서 했던 처리와 동일하게 진행합니다.
15801580
{{{#if ps=false, ts=((au<bu)||((au==bu)&&(ab<bb))), ts
1581
ts일 경우 ps이고, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다.
1582
{{{#if ps=true
1583
{{{#!if tm+="0"
1584
}}}
1581
ts일 경우 ps를 true로 바꾸며, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다.
1582
{{{#if ps=true, tm+="0"
15851583
}}}}}}
1586
{{{#!if !ts
1584
{{{#!if !ts&!ps
15871585
tw, tx, ty를 정의하고 처리하는 과정은 앞자리에서 몫을 찾는 과정과 동일합니다. 앞에서 이미 au, ab를 정수로 만들었으므로 여기에 au, ab를 정수로 만드는 처리를 할 필요가 없습니다.
15881586
{{{#!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
15911602
}}}
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()
15921611
}}}
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"
15931623
}}}
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
}}}
15941644
15951645
1596
15971646
##rs 매기기
15981647
15991648
##ru 매기기
......