POJ 3720 Occurrence of Digits

問題

1/2 = .5, 1/3 = .(3), 1/4 = .25 ,...1/nと書いていったとき、
小数部分に数字kは何回現れるか求めよ。

制約条件

n≦100
k≦10

方針

出てきた数字を数えながら筆算の割り算をしていく。
割りきれたり、おなじ余りを検出したら筆算は終了。


nが小さいので毎回愚直にやってよい。

ソースコード

int n,k;
int cnt[10];
bool v[101];

int main(){
  while(~scanf("%d%d",&n,&k)){
    rep(i,10)cnt[i]=0;
    for(int i=2;i<=n;i++){
      memset(v,0,sizeof(v));
      int mod=1;
      v[1]=1;
      while(mod){
        mod*=10;
        int d=mod/i;
        mod%=i;
        cnt[d]++;
        if(v[mod])break;
        v[mod]=1;
      }
    }
    printf("%d\n",cnt[k]);
  }
  return 0;
}