看别人的题解懂了一些些 参考《编程之美》P132 页《1 的数目》
#include<iostream> #include<stdio.h> using namespace std; int getone(int n) { int ans=0,base=1,right,left,now; while(n/base) { right=n%base; left=n/(base*10); now=(n/base)%10; if(now==0)ans+=left*base; else if(now==1)ans+=left*base+right+1; else ans+=(left+1)*base; base*=10; } return ans; } int main() { int n; while(scanf("%d",&n)!=EOF) { printf("%d ",getone(n)); } return 0; }