HDU 4588 Count The Carries(找规律,模拟)

时间:2023-12-21 09:45:14

题目

大意:

求二进制的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[],aa,bb,cc,cc1,bb1;
len[]=;
for(int i=;i<;i++)
len[i]=len[i-]*;
while(scanf("%d%d",&a,&b)!=EOF)
{
id=;
b++;a++;
ans=;
temp=;
while(temp)
{
temp=temp/;
ans+=temp;
id++;
aa= b/len[id]*len[id-] - a/len[id]*len[id-];
bb=b%len[id], bb1 = a%len[id];
cc=len[id-], cc1 = len[id-];
if(bb<cc) bb=,cc=;
if(bb1<cc1) bb1=,cc1=;
temp=temp+aa+bb-cc-bb1+cc1;//原来是这里出了岔子,,,,唉
if( (a- ) & len[id-] )
temp++;
}
printf("%I64d\n",ans);
}
return ;
}