大意:
求二进制的a加到b的进位数。
思路:
列出前几个2进制,找规律模拟。
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <stack> #include <vector> using namespace std; int main() { int a,b,id; __int64 ans,temp,len[63],aa,bb,cc,cc1,bb1; len[0]=1; for(int i=1;i<63;i++) len[i]=len[i-1]*2; while(scanf("%d%d",&a,&b)!=EOF) { id=0; b++;a++; ans=0; temp=1; while(temp) { temp=temp/2; ans+=temp; id++; aa= b/len[id]*len[id-1] - a/len[id]*len[id-1]; bb=b%len[id], bb1 = a%len[id]; cc=len[id-1], cc1 = len[id-1]; if(bb<cc) bb=0,cc=0; if(bb1<cc1) bb1=0,cc1=0; temp=temp+aa+bb-cc-bb1+cc1;//原来是这里出了岔子,,,,唉 if( (a-1 ) & len[id-1] ) temp++; } printf("%I64d ",ans); } return 0; }