示例:
21010
个位:1-->21010
2101
mul=1
十位:1x-->2101x 2100+1=2101
mul=10
百位:1xx-->210xx 2100
mul=100
千位:1xxx-->21xxx 2000+10+1=2011 mul=1000
万位:1xxxx-->2xxxx 10000 mul=10000
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
typedef long long ll;
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int t,wei;
ll ans=0;
int mul=1;
t=n;
while(t){
wei=t%10; //从个位开始取
//判断当前位的
//(1)if当前位是0 直接高一位*数位mul
//(2)if当前位是1 特殊情况 高一位*数位mul+(当前位数前面数字+1)
//(3)if当前位是>1 (高一位+1)*数位mul
if(wei==0)
ans+=n/(mul*10)*mul;
else if(wei==1)
{
ans+=n/(mul*10)*mul;
ans+=(n%mul)+1;
}
else
ans+=(n/(mul*10)+1)*mul;
mul*=10;
t/=10;
// cout<<ans<<endl;
}
printf("%lld\n",ans);
}
return 0;
}