有趣的数

在这里插入图片描述
我们定义qsm函数是用来转进制的,枚举一下我们选的整数,从小到大枚举,然后用qsm把这个数转B1B2进制然后判断是否相等,每次取个min就行了,注意这里题目中虽然说是所有不超过 1 0 18 10^{18} 1018但是在计算过程中是有可能爆long long的,这是要注意的

#include<bits/stdc++.h>
using namespace std;
const  long long inf=1e18;
long long B1,D1,B2,D2,l1,r1,l2,r2;
int main()
{
 scanf("%lld%lld%lld%lld",&B1,&D1,&B2,&D2);
 l1=1;
 r1=1;
 for(int i=1;i<D1;i++)
 {
  if(l1<inf/B1) 
   l1*=B1;
  else
  {
   l1=inf+1;
   break;
  }
 }
 for(int i=1;i<=D1;i++)
 {
  if(r1<inf/B1) 
   r1*=B1;
  else
  {
   r1=inf+1;
   break;
  }
 }
 l2=1;r2=1;
 for(int i=1;i<D2;i++)
 {
  if(l2<inf/B2) 
   l2*=B2;
  else 
  {
   l2=inf+1;
   break;
  }
 }
 for(int i=1;i<=D2;i++)
 {
  if(r2<inf/B2) 
   r2*=B2;
  else
  {
   r2=inf+1;
   break;
  }
 }
 l1=max(l1,l2);
 r1=min(r1,r2);
 if(l1<=r1) 
  printf("%lld\n",r1-l1);
 else 
  printf("0\n");
 return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值