1049. Counting Ones (30)

来源:互联网 发布:有人买过淘宝店吗 编辑:程序博客网 时间:2024/06/05 18:26

IDEA

1.分别考虑每一位出现1的情况,将其相加

循环考虑当前位,高位,低位

如果当前位==0,则该为出现1 的情况由更高位决定,= 更高为数字*当前位数

如果当前位==1,则该为出现1 的情况受更高位以及低位影响,= (更高为数字*当前位数)+(低位数字+1)

如果当前位>1,则该为出现1 的情况由更高位决定,= (更高为数字+1)*当前位数


CODE

#include<iostream>#include<cstdio>#include<fstream>using namespace std;int CountOnes(int n){int count=0;int factor=1;int high,low,curr;while(n/factor){high=n/(factor*10);low=n%factor;curr=(n/factor)%10;//cout<<high<<" "<<curr<<" "<<low<<endl;switch(curr){case 0:count+=high*factor;break;case 1:count+=high*factor+low+1;break;default:count+=(high+1)*factor;}//cout<<count<<endl;factor*=10;}return count;}int main(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin);#endifint n;scanf("%d",&n);printf("%d\n",CountOnes(n));#ifndef ONLINE_JUDGEfclose(stdin);#endifreturn 0;}


0 0
原创粉丝点击