r249 vs r250
......
14651465
{{{#!if au=+au, ab=+bb, bu=+bu, bb=+bb
14661466
}}}
14671467
1468
au의 값이 bu보다 작거나, au==bu이더라도 ab<bb이면 해당하는 자릿수의 몫이 0이라는 의미리므로 다음 자릿수로 넘깁니다. 이 과정에서 변수 ts(logical)를 가져옵니다.
1469
{{{#if ts=((au<bu)||((au==bu)&&(ab<bb))), ts
1468
au의 값이 bu보다 작거나, au==bu이더라도 ab<bb이면 해당하는 자릿수의 몫이 0이라는 의미리므로 다음 자릿수로 넘깁니다. 이 과정에서 변수 ps(logical)를 false로 초기화한 다음 가져옵니다.
1469
{{{#if ps=false, (au<bu)||((au==bu)&&(ab<bb))
14701470
{{{#if ps=true
14711471
}}}}}}
14721472
!ts이러면 ① au>bu이거나, ② au==bu이고 ab>=bb인 경우입니다. !ts이고 !ps(다음 자릿수로 계산을 넘기지 않음)임을 if 조건문으로 둔 상태에서 진행합니다.
1473
{{{#!if !ts&&!ps
1473
{{{#!if !ps
14741474
au를 bu로 나눈 몫을 tw로 정의합니다. 정수를 정수로 나누면 몫만 계산되며, 100,000,000,000,000,000 이상 999,999,999 999,999,999 이하의 한 정수를 100,000,000,000,000,000 이상의 다른 한 정수로 나눈 몫이므로 tw의 값은 최소 0 최대 9가 됩니다.
14751475
{{{#!if tw=au/bu
14761476
}}}
......
15141514
{{{#!if au-=tx, ab-=ty
15151515
}}}}}}
15161516
1517
au, ab에서 몫을 빼고 나니 au, ab가 모두 0으로 된다면 더 이상 계산을 하지 않아야 하므로 br를 true로 반환합니다. au와 ab가 모두 0인 조건을 ts로 정의합니다.
1518
{{{#!if ts=((au==0)&&(ab==0)), ts
1517
au, ab에서 몫을 빼고 나니 au, ab가 모두 0으로 된다면 더 이상 계산을 하지 않아야 하므로 br를 true로 반환합니다.
1518
{{{#!if (au==0)&&(ab==0)
15191519
{{{#!if br=true
15201520
}}}}}}
1521
어느 하나가 0이 되지 않는다면 자릿수를 옮깁니다.
1522
{{{#!if !ts
1521
어느 하나가 0이 되지 않는다면 br는 여전히 false이므로 !br일 때 자릿수를 옮깁니다.
1522
{{{#!if !br
15231523
au, ab를 문자열로 다시 바꿉니다.
15241524
{{{#!if au=au.toString(), ab=ab.toString()
15251525
}}}
......
15401540
}}}
15411541
ab의 나머지 17자리를 앞으로 당긴 다음 "0"을 더합니다.
15421542
{{{#!if ab=ab.substr(1,17)+"0"
1543
}}}}}}
1543
}}}
1544
여기까지가 자릿수를 한 칸씩 옮기는 과정입니다.
1545
}}}
15441546
##i=1 part 1
15451547
몫으로 기록할 숫자의 첫번째 자리를 구했다면, 그 다음 자리의 숫자를 찾기 위해 (변수 tn으로 만들 수 있는 여분의 1자리 +) 18자리 + 18자리 숫자를 18자리+18자리 숫자로 나누는 계산을 합니다. tn이 9가 될 경우 9로 시작하는 19자리 숫자를 long integer로 모두 표현할 수 없으므로 10**18 자리부터 먼저 계산합니다. 10**18의 1번째 숫자의 몫을 구한 다음 나머지를 18자리 숫자에 더하는 과정(part 1)을 거친 다음 그 18자리에서 몫을 구하는 과정(part 2)을 거칩니다.
15461548
......
15771579
br(0으로 나누어떨어짐) 이 걸려있으면 실행하지 않습니다. 그러므로 전체적으로 조건을 !br로 둔 다음 계산을 진행합니다.
15781580
{{{#!if !br
15791581
ps를 false로 초기화한 다음 앞에서 했던 처리와 동일하게 진행합니다.
1580
{{{#if ps=false, ts=((au<bu)||((au==bu)&&(ab<bb))), ts
1582
{{{#if ps=false, (au<bu)||((au==bu)&&(ab<bb))
15811583
ts일 경우 ps를 true로 바꾸며, "ps일 경우 tm의 오른쪽에 "0"을 더하"는 과정을 여기로 병합합니다.
15821584
{{{#if ps=true, tm+="0"
15831585
}}}}}}
1584
{{{#!if !ts&!ps
1586
{{{#!if !ps
15851587
tw, tx, ty를 정의하고 처리하는 과정은 앞자리에서 몫을 찾는 과정과 동일합니다. 앞에서 이미 au, ab를 정수로 만들었으므로 여기에 au, ab를 정수로 만드는 처리를 할 필요가 없습니다.
15861588
{{{#!if tw=au/bu, tx=bu*tw, ty=bb*tw
15871589
}}}{{{#!if ty=ty.toString(), ty.length==19
......
16011603
}}}}}}{{{#!if au-=tx, ab-=ty
16021604
}}}
16031605
ts를 au와 ab가 모두 0이 되는 조건으로 다시 정의합니다.
1604
{{{#!if ts=((au==0)&&(ab==0)), ts
1605
{{{#!if br=true, ps=true
1606
{{{#!if (au==0)&&(ab==0)
1607
{{{#!if br=true
16061608
}}}}}}}}}
16071609
어느 자릿수부터 br가 true로 되면 이후 자릿수 옮겨 몫을 구하는 과정이나 나머지를 정리하는 과정을 더 이상 할 필요가 없습니다.
1608
{{{#!if !ts
1610
{{{#!if !br
16091611
au, ab를 문자열로 다시 바꾸고 처리하는 과정은 동일합니다.
16101612
{{{#!if au=au.toString(), ab=ab.toString()
16111613
}}}
......
16391641
{{{#!if ty>ab
16401642
{{{#!if tn-=1, ab+=+("1"+pd)
16411643
}}}}}}{{{#!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
16421664
}}}
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
}}}}}}}}}
16441678
16451679
16461680
##rs 매기기
......