数学题:
三种情况讨论即可
if(num[i] > 1) ans += (sumfront[i]+1)*base[i];
if(num[i] == 1) ans += sumfront[i]*base[i] + sumback[i] + 1;
if(num[i] == 0) ans += sumfront[i]*base[i];
关于代码解释:https://blog.csdn.net/ShellDawn/article/details/90320745
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int num[10];
int sumfront[10];
int base[10];
int sumback[10];
memset(num,0,sizeof(num));
memset(sumfront,0,sizeof(sumfront));
memset(base,0,sizeof(base));
memset(sumback,0,sizeof(sumback));
base[1] = 1;
for(int i=2;i<10;i++) base[i] = base[i-1]*10;
int loc = 1;
while(n>0){
int mod = n%10;
n/=10;
num[loc++] = mod;
}
for(int i=1;i<loc;i++) sumback[i] = sumback[i-1] + num[i-1]*base[i-1];
for(int i=loc-2;i>=1;i--) sumfront[i] = sumfront[i+1]*10 + num[i+1];
int ans = 0;
for(int i=0;i<loc;i++){
if(num[i] > 1) ans += (sumfront[i]+1)*base[i];
if(num[i] == 1) ans += sumfront[i]*base[i] + sumback[i] + 1;
if(num[i] == 0) ans += sumfront[i]*base[i];
}
printf("%d\n",ans);
return 0;
}