7
推荐指数:※※
来源:http://ac.jobdu.com/problem.php?pid=1373
这道题和http://blog.csdn.net/zhu_liangwei/article/details/9207949题类似。要注意:
1.a,b之间的大小不一定
2.判断a.b大小的时候要小心。(特别是使用字符串表示数字的同学)a,b包含的1的个数不一定可以准确反应a.b的大小。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> using namespace std; const int N=20; long long count_ones(char *a,int index){ long long left=0,right=0,i; long long sum=0,len=strlen(a); for(i=0;i<index;i++){ left=left*10+a[i]-'0'; } for(i=index+1;a[i]!='\0';i++){ right=right*10+a[i]-'0'; } long long b=(long long)pow(10,len-index-1); if(a[index]=='0') sum=left*b; else if(a[index]=='1'){ sum=left*b+right+1; } else{ sum=(left+1)*b; } if(index<len-1) sum+=count_ones(a,index+1); return sum; } long long count_num(char *a){ long long sum=0,i; for(i=0;a[i]!='\0';i++){ if(a[i]=='1') sum++; } return sum; } int main(){ char a[N],b[N]; while(scanf("%s%s",a,b)!=EOF){ long long tmp; long long n1=count_ones(a,0); long long n2=count_ones(b,0); if(strlen(a)>strlen(b)||(strlen(a)==strlen(b)&&strcmp(a,b)>0)){ tmp=count_num(b); printf("%lld\n",n1-n2+tmp); } else{ tmp=count_num(a); printf("%lld\n",n2-n1+tmp); } } return 0; }