Problem A Jason的特殊爱好

来源:互联网 发布:maven构建java项目 编辑:程序博客网 时间:2024/05/21 19:30
Problem A Jason的特殊爱好

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;
}