该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//我智商太低了,做了3天才做出来
#include
#include
using namespace std;
#define Max 15 //最大超不过15位
int main()
{
int p10(int x); //不会使用pow(x,y)函数,自己做的10的x次方函数
int n=0;
cin>>n;
int N; //N的大小
N=n;
int pow[Max]; //按位保存的数组
int cnt=0; //计数器,用来记录N是几位数
int i=0;
int sum=0; //保存1的个数
while(N>=1) //取余按位存储
{
pow[i]=N%10;
N=N/10;
i++;
cnt++;
}
int Num_l[Max]={0},Num_r[Max]={0};//分别保存左边的数和右边的数
Num_r[0]=0; //第0位右边为0
Num_l[cnt-1]=0; //最高位左边为0
for(i=0;i
{
for(int j=0;j
{
Num_r[i]+=pow[j]*p10(j);
}
for(int j=cnt-1;j>i;j--)//记录第i位左边数/10
{
Num_l[i]+=pow[j]*p10(j-1);
}
switch(pow[i]){ //判断第i位,分情况处理
case 0:
sum+=Num_l[i];
break;
case 1:
sum+=Num_l[i]+Num_r[i]+1;
break;
default:
sum+=Num_l[i]+p10(i);
}
}
cout<
return 0;
}
int p10(int x)
{
int c=1;
for(int i=0;i
{
c*=10;
}
return c;
}