http://blog.csdn.net/wyg1997/article/details/52169036
给个链接 此人思路很强势 讲解也很细
每个位的值分三种情况处理 0 1 >1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
long long n,sum,t,tn,a;
while(scanf("%lld",&n)!=EOF)
{
tn=n;a=1;sum=0;
while(tn)
{
t=tn%10;
if(t<=1)
sum+=n/(a*10)*a;
if(t==1)
sum+=(n%a)+1;
if(t>1)
sum+=(n/(a*10)+1)*a;//此处为啥加一 因为此位的一也要带上。
tn/=10;
a*=10;
}
printf("%lld\n",sum);
}
}