Official

B - Digit Sum Editorial by kyopro_friends


原案:kyopro_friends

\(1\) から \(N\) までの数それぞれについて、実際に桁和を計算することで問題を解くことができます。桁和を計算する処理を関数として分けて実装するとわかりやすくなります。

桁和を計算する方法は「文字列に変換して1文字ずつ確かめる」が直感的でしょう。他にも「\(10\) で割りながら \(1\) の位を調べる」という方法もあります。

実装例(C++)

#include<bits/stdc++.h>
using namespace std;

int digitsum(int x){
  string s=to_string(x);
  int ans=0;
  for(char c:s)ans+=c-'0';
  return ans;
}

int main(){
  int n,k;
  cin >> n >> k;

  int ans=0;
  for(int i=1;i<=n;i++)if(digitsum(i)==k)ans++;

  cout << ans << endl;
}

実装例(Python)

def digitsum(x):
  s=str(x)
  ans=0
  for c in s:
    ans+=int(c)
  return ans

n,k=map(int,input().split())
ans=0
for i in range(1,n+1):
  if digitsum(i)==k:
    ans+=1

print(ans)

posted:
last update: