10進数→N進数へ変換
#お題
10 進数で表された整数 N, M が与えられます。
N を M 進数に変換して出力してください。
#入力
N M
・ 1 行で整数 N, M が与えられます。
#出力
N M
・ 1 行で整数 N, M が与えられます。
#コード
a,b = map(int,input().split())
ans = ""
tmp = a
while tmp >= b:
ans = str(tmp % b) + ans
tmp //= b
ans = str(tmp % b) + ans
print(ans)
#参考
<別解>
N, M = map(int, input().split())
base = ""
while N > 0:
base += str(N % M)
N //= M
print(base[::-1])
- N が自然数であれば、M で割った余りを取ると、M 進数に変換した際の M^0 の桁を求めることができます。
- M^0 の位を求めたら N を M で割り、もう一度同じ操作を繰り返すと M^1 の位を求めることができます。
- これを繰り返していくことで N を M 進数に変換することができました。
10 進数から 2 進数に変換
#お題
10 進数で表された整数 N が与えられます。
N を 2 進数に変換して出力してください。
#入力
N
・ 1 行で整数 N が与えられます。
#出力
N を 2 進数に変換して出力してください。
#コード
a = int(input())
b = format(a,"b")
print(b)
#参考
- Python の場合、組み込み関数である
bin()
を使用することで、10 進数を 2 進数に変換することができます。 - 変換後の最初の 2 文字は 2 進数を表す 0b なので出力する際には除去する必要があります。
N = int(input())
print(bin(N)[2:])
任意の数で何回割れる?
#お題
整数 N, M が与えられます。
N が何回 M で割れるかを求め、出力してください。
#入力
N M
・ 1 行で整数 N, M が与えられます。
#出力
N が何回 M で割れるかを求め、出力してください。
#コード
n,m = map(int,input().split())
cnt = 0
ans = n
while True:
if ans % m == 0:
ans //= m
cnt += 1
else:
break
print(cnt)
#参考
N, M = map(int, input().split())
div_count = 0
while True:
if N % M == 0:
N //= M
div_count += 1
else:
break
print(div_count)
- Python の場合、
While True:
と記述することで永遠にループを回すことができます。 - N が M で割れなくなった場合に
break
することで無限ループからブレイクするようにしましょう。
2 で何回割れる?
#お題
整数 N が与えられます。
N が何回 2 で割れるかを求め、出力してください。
#入力
N
・ 1 行で整数 N が与えられます。
#出力
N が何回 2 で割れるかを求め、出力してください。
#コード
a = int(input())
cnt = 0
ans = a
while ans % 2 == 0:
ans = ans / 2
cnt += 1
print(cnt)
#参考
<別解>
N = int(input())
div_count = 0
while True:
if N % 2 == 0:
N //= 2
div_count += 1
else:
break
print(div_count)
- Python の場合、
While True:
と記述することで永遠にループを回すことができます。 - N が 2 で割れなくなった場合に
break
することで無限ループからブレイクするようにしましょう。
2 で何回割れる?
#お題
整数 N が与えられます。
N が何回 2 で割れるかを求め、出力してください。
#入力
N
・ 1 行で整数 N が与えられます。
#出力
N が何回 2 で割れるかを求め、出力してください。
#コード
a = int(input())
cnt = 0
ans = a
while ans % 2 == 0:
ans = ans / 2
cnt += 1
print(cnt)
#参考
<別解>
N = int(input())
div_count = 0
while True:
if N % 2 == 0:
N //= 2
div_count += 1
else:
break
print(div_count)
- Python の場合、
While True:
と記述することで永遠にループを回すことができます。 - N が 2 で割れなくなった場合に
break
することで無限ループからブレイクするようにしましょう。
カウント変数を使った計算
#お題
N 個の整数 M_1, M_2, ..., M_N があります。
i 番目の M を M_i とするとき、M_i * i
を改行区切りで出力してください。
例えば、M_5
が 3
の場合、3 * 5 = 15
となります。
#入力
N
M_1 M_2 ... M_N
・ 1 行目に整数 N が与えられます。
・ 2 行目に N 個の整数 M_1, M_2, ..., M_N が与えられます。
#出力
i 番目の M を M_i とするとき、M_i * i
を改行区切りで出力してください。
M_1 * 1
M_2 * 2
...
M_N * N
#コード
input()
a = [int(x) for x in input().split()]
cnt = 1
for i in a:
print(i * cnt)
cnt += 1
#参考
- M_i * i をおこなう際、配列は 0 番目から数えることに注意して計算しましょう。
N = int(input())
M = list(map(int, input().split()))
for i in range(N):
print(M[i] * (i + 1))
各桁の和
#お題
10 進数で表された整数 N が与えられます。
整数 N の各桁の和を計算し、出力してください。
#入力
N
・ 1 行で整数 N が与えられます。
#出力
整数 N の各桁の和を計算し、出力してください。
#コード
a = [int(x) for x in list(input())]
ans = 0
for i in a:
ans += i
print(ans)
#参考
N = int(input())
digit_sum = 0
while N > 0:
digit_sum += N % 10
N //= 10
print(digit_sum)
- N が自然数であれば、10 で割った余りを取ると、一の位の桁を求めることができます。
- 一の位を求めたら N を 10 で割り、もう一度同じ操作を繰り返すと、一の位は切り捨てられ、十の位を求めることができます。
- これを繰り返していくことで桁和を求めることができました。