51nod1009(1的数目)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod1009(1的数目)相关的知识,希望对你有一定的参考价值。

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009

 

题意:中文题诶~

 

思路:分别考虑各个数位上出现1的次数,再求和就好了..

注意当前数位上数字为0, 1, 2~9三种情况的计数方法略有不同,想到这里其他的细枝末节就简单了啦...

 

代码:

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 
 5 int main(void){
 6     ll n, ans=0, gg=1;
 7     cin >> n;
 8     ll t=n;
 9     while(t){
10         ll cnt=t%10;
11         ll xy=n/(gg*10);
12         if(cnt==0){  //当前数字为0的情况
13             ans+=xy*gg;
14         }else if(cnt==1){ //当前数字为1的情况
15             ans+=xy*gg;
16             ans+=n%gg+1;
17         }else{
18             ans+=(xy+1)*gg; //当前数字为2~9的情况
19         }
20         gg*=10;
21         t/=10;
22     }
23     cout << ans << endl;
24     return 0;
25 }

 

  

以上是关于51nod1009(1的数目)的主要内容,如果未能解决你的问题,请参考以下文章

51 Nod 1009 数字1的数量(数位dp)

51nod 1009 数位dp入门

51Nod1009

51Nod 1009 数字1的数量

51nod1009 数字1的数量

51nod 1009 - 数字1的数量 - [数位DP][模板的应用以及解释]