【每日刷题】Day91
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 面试题 05.07. 配对交换 - 力扣(LeetCode)
2. 面试题 08.05. 递归乘法 - 力扣(LeetCode)
1. 面试题 05.07. 配对交换 - 力扣(LeetCode)
//思路:构造一个奇数位全为1,偶数位全为0的数和一个奇数位全为0,偶数位全为1的数字。
//将这个两个数字分别与num &,获取num的奇偶位。
//将获取到的奇数位组成的数字>>1,获取到的偶数位组成的数字<<1,返回它们 | 的结果
class Solution {
public:
int exchangeBits(int num)
{
//奇数位全为1,偶数位全为0的数字
long x = 2863311530;
//偶数位全为1,奇数位全为0的数字
long y = 1431655765;
//获取num奇偶位
long ret1 = num&x;
long ret2 = num&y;
ret1>>=1;
ret2<<=1;
return ret1|ret2;
}
};
2. 面试题 08.05. 递归乘法 - 力扣(LeetCode)
//思路:十进制与二进制的乘法。看图理解
class Solution {
public:
void mul(int& ans,long long a,long long b)
{
//如果为0了直接返回
if(!b)
return;
//如果当前位为1,则将结果加上a
if(b&1)
ans+=a;
//继续往下递归遍历b的位,a+a(完成a*2操作,因为相邻位为两倍关系),b>>1
mul(ans,a+a,b>>1);
}
int multiply(int A, int B)
{
int ans = 0;
mul(ans,A,B);
return ans;
}
};
3. 挑7_牛客题霸_牛客网 (nowcoder.com)
//思路:暴力遍历+取模。
#include <iostream>
using namespace std;
int main()
{
int ans = 0;
int n;
cin>>n;
for(int i = 7;i<=n;i++)
{
//7的倍数
if(!(i%7))
ans++;
else
{
//含有7
int tmp = i;
while(tmp)
{
if(tmp%10==7)
{
ans++;
break;
}
tmp/=10;
}
}
}
cout<<ans<<endl;
return 0;
}