#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int PowerOfBase10(int len){
int number=1;
for(int i=1;i<=len;i++)
number*=10;
return number;
}
int NumberOf1(char* str){
if(str==NULL||*str=='\0'||*str<'0'||*str>'9')
return 0;
int numberFirstDigit=0;
int first=*str-'0';
unsigned int length=static_cast<unsigned int>(strlen(str));
if(length==1&&first==0)
return 0;
if(length==1&&first==1)
return 1;
if(first>1)
numberFirstDigit=PowerOfBase10(length-1);
else if(first==1) numberFirstDigit=atoi(str+1)+1;
int otherFirstDigit=first*(length-1)*PowerOfBase10(length-2);
int remainingFirstNumber=NumberOf1(str+1);
return numberFirstDigit+otherFirstDigit+remainingFirstNumber;
}
int NumberOf1Between1AndN(int n){
if(n<=0) return 0;
char str[50];
sprintf(str,"%d",n);
return NumberOf1(str);
}
int NumberOf1Again(int n){
int i;
int number=0;
while(n){
i=n%10;
if(i==1) number++;
n=n/10;
}
return number;
}
int NumberOf1Between1AndNAgain(int n){
int i;
int sum=0;
for(i=1;i<=n;i++)
sum+=NumberOf1Again(i);
return sum;
}
void main(){
int n;
printf("请输入数据\n");
scanf("%d",&n);
int num1=NumberOf1Between1AndN(n);
int num=NumberOf1Between1AndNAgain(n);
printf("%3d %3d",num1,num);
}
NumberOf1Between1AndN
最新推荐文章于 2021-11-18 08:54:42 发布