一、简单做法
求1+2+...+n
注意i初始为1,i 临界点等于n
int sumNums(int n) {
int sum=0;
for(int i=1;i<=n;i++){
sum+=i;
}
return sum;
}
2的幂
int的范围是2^31 ~ 2^31-1;若i=31,p最大算到2^31,超出范围,所以如果要让i=31,需要定义p为unsign int类型
其实运行i<31,也可以,因为n如果超过2^30,后面都不是2的幂,即都为false,运行速度也会快很多。
bool isPowerOfTwo(int n) {
if(n<0){
return false;
}
if(n==1){
return true;
}
if(n>0){
int p=1;
for(int i=1;i<=31;i++){
p*=2;
if(n==p){
return true;
}
}
}
return false;
}
3的幂 for(int i=1;i<20;i++)
4的幂 for(int i=1;i<15;i++)
n的第k个因子
int kthFactor(int n, int k) {
int cnt=0;
for(int i=1;i<=n;i++){
if(n%i==0){
++cnt;
if(cnt==k){
return i;
}
}
}
return -1;
}
有效完全平方数
if(p>num){
return false;
}
必须加上此判断条件,否则会一直循环
bool isPerfectSquare(int num) {
long long p;
for(int i=1;;i++){
p=(long)i*i;
if(num==p){
return true;
}
if(p>num){
return false;
}
}
return false;
}
二、进阶做法
求1+2+...+n
利用递归求解
int sumNums(int n) {
return n==0?0:n+sumNums(n-1);
}