九日集训day2 |心猿意马

文章介绍了如何使用C++编写基础算法,如机械累加器(利用等差数列公式),以及判断数字是否为2、3、4的幂和完全平方数的方法,通过循环和位运算实现,适合初学者学习基本逻辑和算法设计。
摘要由CSDN通过智能技术生成

九日集训day 2

累加器

题目链接
请设计一个机械累加器,计算从 1、2… 一直累加到目标数值 target 的总和。注意这是一个只能进行加法操作的程序,不具备乘除、if-else、switch-case、for 循环、while 循环,及条件判断语句等高级功能。

class Solution {
public:
    int mechanicalAccumulator(int target) {
        return (1+target)*target/2;
    }
};

这是直接用的等差数列写的

class Solution {
public:
    int mechanicalAccumulator(int target) {
        int ans=0;
        for(int i=1;i<=target;++i){
            ans+=i;
        }
        return ans;
    }
};

这是用的循环写的

判断是否为2的幂

题目链接

class Solution {
public:
    bool isPowerOfTwo(int n) 
    {
        return n > 0 && (n & (n-1)) == 0;
    }
    
};

我虽然也想到了位运算,但是没有最好的解法简便。这里直接判断了两点:1.是否大于0?
这里用到的位运算的方法是这样的:如果是2的幂,那么只有一位是1其余都是0,那么这个数和n-1进行位与运算的时候得出来的结果是0

判断是否为3的幂

题目链接

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<=0){
            return false;
        }
        for(int i=1;i!=1162261467;i*=3){
            if(i==n){
                return true;
            }
        }
        return n==1162261467;
    }
};

这是用循环写的,我看看官方的解法好像差不多,但为什么那么快?
官方代码如下:

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<=0)
        {
            return false;
        }
        long x=1;
        while(x!=n)
        {
            x=x*3;
            if(x>n)
            {
                return false;
            }
        }
        return true;
    }
};

判断是否是4的幂

题目链接
基本不用改的,直接写就完事了

class Solution {
public:
    bool isPowerOfFour(int n) {
        if(n<=0)
        {
            return false;
        }
        long x=1;
        while(x!=n)
        {
            x=x*4;
            if(x>n)
            {
                return false;
            }
        }
        return true;
    }
};

leetcode 1492 n的第k个因子子

题目链接

class Solution {
public:
    int kthFactor(int n, int k) {
        bool flag=true;
        for(int i=1;i<=n;i++){
            if(n%i==0){
                k--;
            }
            if(k==0){
                flag=false;
                return i;
            }

        }
        if(flag){
            return -1;
        }else{
            return 0;
        }

    }
};

判断是否是完全平方数

题目链接

class Solution {
public:
    bool isPerfectSquare(int num) {
        int i=sqrt(num);
        i*=i;
        if(i==num){
            return true;
        }else{
            return false;
        }

    }
};

这段代码是一个C++函数,用于判断给定整数 num 是否为完全平方数。这里是对代码的逐步解析:

  1. 函数签名:

    • bool isPerfectSquare(int num) - 这个方法属于 Solution 类,并接受一个整数 num 作为参数。它返回一个布尔值,表示 num 是否是完全平方数。
  2. 求平方根:

    • int i = sqrt(num); - 这行代码使用 sqrt 函数(需要包含 <cmath><math.h> 头文件)计算 num 的平方根,并将结果存储在整型变量 i 中。由于 i 被声明为整数,所以这里的平方根会被自动向下取整。
  3. 计算平方:

    • i *= i; - 这行代码将 i 的值乘以其自身,即计算其平方。
  4. 判断是否为完全平方数:

    • if (i == num) - 这个条件判断 i(即 num 的平方根的平方)是否等于原始数 num。如果相等,说明 num 是一个完全平方数。
      • return true; - 如果条件满足(即 num 是完全平方数),函数返回 true
    • else - 如果不相等,执行 else 分支。
      • return false; - 返回 false,表示 num 不是完全平方数。

这个函数有效地判断了一个整数是否可以表示为某个整数的平方,即检查它是否是完全平方数。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值