第 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