标签:target online bsp ace tps 十进制 main turn 次数
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009
题目:
输入N(1 <= N <= 10^9)
输出包含1的个数
12
5
题意:中文题诶
题解:我们计算每个数位上1出现的次数。每个数位上数字分=0,=1,>1,三种情况讨论。
举个栗子:假设我们要计算百位上1出现的次数。
1.=0,出现1的可能性只由更高位决定。比如12013,百位出现1的情况为100~199,1100~1199,2100~2199,…,11100~11199,共1200个。等于更高位数字乘以当前位数,即12 * 100。
2.=1,出现1的可能性由更高位和低位决定。比如12113,百位出现1的情况为100~199,1100~1199,2100~2199,…,11100~11199,12100~12113,即12*100+13+1。
3.>1,出现1的可能性只由更高位决定。比如12213,百位出现1的情况为100~199,1100~1199,2100~2199,…,11100~11199,12100~12199,即(12+1)*100。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int main(){ 6 int m,n,mul=1; 7 long long ans=0; 8 cin>>n; 9 int t=n; 10 while(t){ 11 m=t%10; 12 if(m==0) ans+=n/(mul*10)*mul; 13 else if(m==1){ 14 ans+=n/(mul*10)*mul; 15 ans+=(n%mul)+1; 16 cout<<"YY = "<<n/(mul*10)*mul+(n%mul)+1<<endl; 17 } 18 else ans+=(n/(mul*10)+1)*mul; 19 mul*=10; 20 t/=10; 21 } 22 cout<<ans<<endl; 23 return 0; 24 }
标签:target online bsp ace tps 十进制 main turn 次数
原文地址:http://www.cnblogs.com/Leonard-/p/7774567.html