
Accept: 94 Submit: 424
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Jason很喜欢数字,特别是1这个数字,因为他觉得1有特殊的含义。为了让更多的人喜欢上1,他决定出一题关于1的水题(每个人都喜欢水题)。
Input
输入数据中有多组数据,每组数据输入为两个正数,a,b(1<=a,b<=10^18)。
Output
输出a到b之间的整数包含多少个1。
Sample Input
1 1000
Sample Output
301
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[21],b[21];
while(cin>>a>>b){
int lena=strlen(a);
int lenb=strlen(b);
int i,j,l,k;
unsigned long long sum=0;
if(lena==lenb)
{
int flag=0;
for(i=0;i<lena;i++)
if(((int)(a[i]-'0')<1&&1<(int)(b[i]-'0'))||(a[i]=='1'||b[i]=='1'))
{
flag=1;
for(j=0;j<lena;j++)
if(j!=i)
{
if(a[i]!=b[j])
sum+=(int)(b[j]-a[j]+1);
else
sum+=(int)(b[j]-a[j]+1);
}
}
if(!flag)
sum++;
cout<<sum<<endl;
continue;
}
for(i=lena;i<=lenb;i++){
if(i==lena){
for(j=0;j<i;j++){
if(a[j]=='1')
{
if(j==0)
sum++;
for(l=0;l<j;l++)
sum+=(9-(int)(a[l]-'0')+1);
for(k=j+1;k<i;k++)
sum+=(int)(a[k]-'0');
}
}
}
else
{
if(i==lenb){
int flag=0;
for(j=0;j<i;j++){
flag=0;
if(b[j]=='1')
{
flag=1;
if(j!=0)
sum+=((int)(a[0]-'0'));
for(l=1;l<j;l++)
sum+=((int)(b[l]-'0')+1);
for(k=j+1;k<i;k++){
if(b[k]!='0')
sum+=(int)(b[k]-'0')+1;
else
sum+=(int)(b[k]-'0');
}
}
}
if(!flag)
sum++;
}
else
{
if(i==2)
sum+=((i-1)*10+9);
else
{
int num=1;
for(int q=0;q<i-1;q++)
num=num*10;
sum+=(9*(i-2)*10*(i-1)+num);
}
}
}
}
cout<<sum<<endl;
}
return 0;
}
#include<cstring>
using namespace std;
int main()
{
char a[21],b[21];
while(cin>>a>>b){
int lena=strlen(a);
int lenb=strlen(b);
int i,j,l,k;
unsigned long long sum=0;
if(lena==lenb)
{
int flag=0;
for(i=0;i<lena;i++)
if(((int)(a[i]-'0')<1&&1<(int)(b[i]-'0'))||(a[i]=='1'||b[i]=='1'))
{
flag=1;
for(j=0;j<lena;j++)
if(j!=i)
{
if(a[i]!=b[j])
sum+=(int)(b[j]-a[j]+1);
else
sum+=(int)(b[j]-a[j]+1);
}
}
if(!flag)
sum++;
cout<<sum<<endl;
continue;
}
for(i=lena;i<=lenb;i++){
if(i==lena){
for(j=0;j<i;j++){
if(a[j]=='1')
{
if(j==0)
sum++;
for(l=0;l<j;l++)
sum+=(9-(int)(a[l]-'0')+1);
for(k=j+1;k<i;k++)
sum+=(int)(a[k]-'0');
}
}
}
else
{
if(i==lenb){
int flag=0;
for(j=0;j<i;j++){
flag=0;
if(b[j]=='1')
{
flag=1;
if(j!=0)
sum+=((int)(a[0]-'0'));
for(l=1;l<j;l++)
sum+=((int)(b[l]-'0')+1);
for(k=j+1;k<i;k++){
if(b[k]!='0')
sum+=(int)(b[k]-'0')+1;
else
sum+=(int)(b[k]-'0');
}
}
}
if(!flag)
sum++;
}
else
{
if(i==2)
sum+=((i-1)*10+9);
else
{
int num=1;
for(int q=0;q<i-1;q++)
num=num*10;
sum+=(9*(i-2)*10*(i-1)+num);
}
}
}
}
cout<<sum<<endl;
}
return 0;
}