题目
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)
分析
这个算法题目是求从0 ~ n的n+1个整数中k(0 ~ 9)出现的次数。
我们可以将数字拆分成每一位来求。
例如求n=54,k=3:
个位数的3出现在01,13,23,33,43,53,总共出现6次;
十位数的3出现在30,31,32,33,34,35,36,37,38,39,总共出现10次;
即54中的3总共出现了16次。
分析条件可以得出算法:
令m=n;
if(m%n>k) count+=(m/10+1)(10^n);
else if(m%n=k) count+=(10n)+n%(10num+1);
else count+=(m/10)(10^num);
当n%10=0时,count=n/10+1即可。
CODE
最后程序如下
/*
cin>>n;cin>>k;
*/
main(){
int count=0,num=1;
int a;int m=n;
if(k==0)return count=m/10+1;
while(m>0){
a=m%10;
if(a>k){
count+=num*(m/10+1);
}
else if(a==k){
count+=num*(m/10)+n%num+1;
}
else{
count+=num*(m/10);
}
m=m/10;
num=num*10;
}
return count;
}
网友评论