41114


[このサイト](http://terukizm.hatenablog.com/entry/20120505/1336218368)の方法で切り上げをして、AIZU
ONLINEジャッジの[この問題](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0007)を解いているのですが、「Wrong
Answer」と出ます。どこに原因があるのでしょうか。  
よろしければ、サイトに書かれてある関数の問題点とその改善案を上げてください。

[code]

    # サイトの関数をmarume.ceilから、int_ceilに変更。
    def int_ceil(src,range):
        return ((int)(src / range) + 1) * range
    
    def main():
        week = int(input())
        debt = 100000
        risi = int_ceil(int(debt*0.05) * week,10000)
        ans = debt + risi
        print(ans)
    
    if __name__ == "__main__":
        main()
    
[/code]


CC BY-SA 3.0
2018-01-19T09:20:37.147
41087
2018-01-21T14:18:33.520
26886
question
python python3
Pythonに於ける整数の切り上げと切り捨てについて


質問にある`int_ceil`は`src`が`range`の倍数になっている場合、正しく切り上げができません。

[code]

     def int_ceil(src, range):
         return ((int)(src / range) + 1) * range
    
     print(int_ceil(900, 1000))  # 1000
     print(int_ceil(1000, 1000)) # 2000 （正しくは1000）
     print(int_ceil(1100, 1000)) # 2000
    
[/code]

[この質問](https://stackoverflow.com/questions/8866046/python-round-up-integer-to-
next-hundred)のようにすると正しく動きます。

[code]

    import math
    def int_ceil(src, range):
        return int(math.ceil(src/float(range)) * range)
    
    # 別の方法
    def int_ceil(src, range):
        return src if src % range == 0 else src + range - src % range
    
[/code]

さらに、質問のmain関数の処理を  
・先週までの利子を加えた借金総額に対して利子が加わる  
・1000円未満を切り上げる  
という処理に訂正すると以下のようなプログラムになります。

[code]

    import math
    def int_ceil(src, range):
        return int(math.ceil(src/float(range)) * range)
    
    def main():
        week = int(input())
        debt = 100000
        for _ in range(week):
            risi = debt * 0.05
            debt = int_ceil(debt + risi, 1000)
        print(debt)
    
    if __name__ == "__main__":
        main()
    
[/code]

このコードを提出するとAcceptされました。


CC BY-SA 3.0
2018-01-21T03:31:42.697
41114
2018-01-21T14:18:33.520
2018-01-21T14:18:33.520
27084
27084
41087
answer