ABC156 B - Digits
備忘録
問題
回答
import sys import os def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") N, K = map(int, sys.stdin.readline().split()) ret = 0 while N > 0: N = N // K print(N) ret += 1 print(ret) if __name__ == '__main__': main()
考え方
位取り記数法により、
整数N
をK
で割った値をN
に置き換えて、K
で割ることが出来る回数が桁数。(らしい)
下記の記事を読んで、雰囲気だけ理解した。
10
進法では整数が1, 2, 3, ... 8, 9, 10, 11
と順に数が増え、
9
から10
になるタイミングで一桁増える。
つまり10
進法では1つの桁数を0 ~ 9
の10
個の数値で表現している。
そのため、10
進法では整数を10
で割ることが出来る回数 = 桁数。
2
進法、8
進法、16
進法も同様の考えをすることができる。
例えばN
が11
、K
が2
のとき、
整数11
を2
進法で表すと1011
になる。
2
進法では1, 10, 11, 100, 101, ... , 1011, 1100, 1101
と数が増える。
2
進法も0
と1
の2
つの数値で桁数を表現しているため、
整数N
をK
で割った値をN
に置き換えて、K
で割ることが出来る回数が桁数となる。