其他分享
首页 > 其他分享> > 第 9 章 巧解数学问题

第 9 章 巧解数学问题

作者:互联网

在这里插入图片描述
204. 计数质数
好一个简单题,妥妥的超时。埃氏筛学到了学到了。

class Solution {
public:
    int countPrimes(int n) 
    {
        vector<int> isPrime(n, 1);
        int ans = 0;

        for(int i = 2;i < n;i++)
        {
            if(isPrime[i])
            {
                ans++;
                if((long long ) i * i < n)
                {
                    for(int j = i * i;j < n;j += i)
                    {
                        isPrime[j] = 0;
                    }
                }
            }
        }

        return ans;
    }
};

504. 七进制数
会写,但是记录一下别人的代码,整洁干净。

class Solution {
public:
    string convertToBase7(int num) 
    {
        if(num == 0)    return "0";// 判零

        string ans;
        bool is_negative = false; //记录正负

        if(num < 0)
        {
            is_negative = true;
            num = -num;
        }

        while(num)
        {
            int x = num % 7;
            ans = to_string(x) + ans;
            不能写成 ans += to_string(x)
string相加位置决定加在原字符串前后;
            num /= 7;
        }

        return is_negative ? "-" + ans : ans;
    }
};

172. 阶乘后的零
末尾0都是 2 * 5的结果。2的数量 > 5的数量,,所以只需要计算 5 的个数。
正常写法:

class Solution {
public:
    int trailingZeroes(int n) 
    {
        int cnt = 0;

        while(n > 0)
        {
            cnt += n / 5;
            n /= 5;
        }
return cnt;
    }
};

大佬的递归:

int trailingZeroes(int n) 
{
return n == 0? 0: n / 5 + trailingZeroes(n / 5);
}

标签:cnt,return,string,int,问题,num,数学,ans,巧解
来源: https://blog.csdn.net/qq_45824115/article/details/119408030