64,077
社区成员
发帖
与我相关
我的任务
分享
1.第371,两整数之和
第一个解:偷懒 :p
int getSum(int a, int b){
return a+b;
}
第二个解 亦或补差(错的)
int getSum(int a, int b){
return (a^b)^((a&b)<<1);
}
忘记当时是怎么想的了。看了一i下评论区大佬的说法很好理解而且和我的想法很接近;但我认为只会copy而不保证可以真正理解是学不好算法的,所以没去抄,只是看了很久
2,3同1
4:递归乘法
int multiply(int A, int B){
int c=0;
while(B>0){
c=A+c;
B--;
}
return c;
}
很简单的一题,用的是乘法的本来定义:让a加上 b 个自己,反之亦然
5.除法运算
一:萌新解法 :D
int divide(int dividend, int divisor){
if(divisor!=0){
return (dividend/divisor);
}
else return 0;
}
二:超慢超慢解法
int divide(int dividend, int divisor){
int a=dividend,b=divisor,i;
if(a!=0){
if((a*b)<0){
if(a<0)
a=!a+1;//负数算,倒置补1
else{
b=!b+1;
}
}
for(i=0,a>0,i++){
a-=b;
}
return i+1;
}
else return 0;
}
易知该算法 。。收敛太慢
是想到用退位数(因为提示 2^31)这样除,但是范围太大了想不到怎么办了。。
6:次幂函数
double myPow(double x, int n){
int a=1;
while(n>0){
a*=x;
n--;
}
return a;
}
or :D
double myPow(double x, int n){
return pow(x,n);
}
7平方根运算
int mySqrt(int x){
if(x<=0){
return 0;
}
else
return sqrt(x);
}
8-比大小
int maximum(int a, int b){
return((a-b>=0)?a:b);
}