@ALL
//Imagine that you write down all numbers between A and B in 2's
complement representation using 32 bits. How many 1's will you write
down in all ?

wat's wrong with this code....

working fine for all cases i tested but

on

http://www.spoj.pl/problems/CODESPTA/

wrong answer..
plz.. point out cases where it might fail . thanku..
#include<iostream>
int find(int a)
{   int ret=0;
    if(a>0)
    {
       while(a)
       {
               if(a&1)
                      ret++;
               a=a>>1;
       }
    }
    else if(a==0)
                 ret=0;
         else
         {
             a=~a;
             ret=32; //here ret is maximum bits in the representation
of number and it varies from machine to machine
             while(a>0)
             {
                       if(a&1)
                              ret--;
                       a=a>>1;
             }
         }
   return ret;
}
uint64_t solve(uint64_t a)
{
 if(a == 0) return 0 ;
 if(a % 2 == 0) return solve(a - 1) + find(a) ;
 return (a + 1) / 2 + 2 * solve(a / 2) ;
}

main()
{
    int a,b,t;
    uint64_t in_a,in_b;
    scanf("%d",&t);
    while(t--)
    {       scanf("%d %d",&a,&b);
            if(a==-2147483648 & b==2147483647)
                              printf("18446744073709551616\n");
            else
            {
                if(a<0)
                {      a=-a;
                       in_a=(32*a-solve(a-1));
                       if(b<0)
                       {       b=-b;
                               in_b=(32*b-solve(b-1));

printf("%llu\n",in_a-in_b+(32-find(b-1)));
                       }
                       else
                       {
                               in_b=solve(b);
                               printf("%llu\n",in_b+in_a);
                       }
                }
                else
                {
                        in_a=solve(a);
                        in_b=solve(b);
                        printf("%llu\n",in_b-in_a+find(a));
                }
            }
    }
    return 0;
}

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to