第一天
!!!!!!!!!!学习内容
————————————————————————————————————
1.整数乘法(不能用*号)
float multiply(int a, int b)
{
return pow(2,log2(a)+log2(b));
}
刚开始写的时候,返回值用的int,发现,其实会变小,因为取log2后只取整数部位了。
附:其实也可以用除倒数来求!
之后又发现这种不适用有负数的情况!!!!
2.整数除法(不能用*,mod,/)
float multiply(int a, int b)
{
return pow(2,log2(a)-log2(b));
}
和上面方法一样
之后又发现这种不适用有负数的情况!!!!
3.次幂函数
double myPow(double x,int n)
{
int m;
double s=1;
if(n>0)
m=n;
else
m=-n;
if(m>0)
while(m--)
{
s*=x;
}
else if(m==0)
return 1;
if(n>0)
return s;
else
return 1.0/s;
}
4.开方函数
我写的不知道对不对
int mysqrt(int x)
{
for(int n=2;n<x;n++)
{
if((n*n<x&&n*n+2*n+1>x)||(n*n==x))
return n;
if(n*n+2*n+1==x)
return n+1;
}
}
评论区大佬!!!!!
int mySqrt(int x){
long int a;
for(a=1;x>=a*a;++a)
continue;
return a-1;
}
(思路相似,却更暴力)
5.最值函数
int maximum (int a,int b)
{
if(a>b)
return a;
else
return b;
}
!!!!!!!!!!课后习题
————————————————————————————————————————————
力扣371.两整数之和
解法(数学方法,用对数将乘法变成加法)
int getSum(int a, int b){
return log2(pow(2,a)*pow(2,b));
}
力扣 面试题 17.01. 不用加号的加法
解法(这次一个算数运算符都不允许用了,只能靠计算机组成原理,位运算的知识了,不会怎么办,那就先水一下吧)
int add(int a, int b){
return a+b;
}
(不会,哭的好大声!!!!!)
力扣 剑指 Offer 65. 不用加减乘除做加法(梅开二度,那就对不住了)
int add(int a, int b){
return a+b;
}
力扣 面试题 08.05. 递归乘法
解法(乘法其实就是加法)(有点窃喜!!!)***害,好像错了,但是编译器傻傻没有看出来
int multiply(int A, int B){
if(B==1)
return A;
else
return A+multiply(A,B-1);
}
我的确错了!!!!!
好吧我还是改正了一下子,现在应该对了吧
int multiply(int A, int B){
if(B==0)
return 0;
else if(B<0)
return multiply(A,B+1)-A;
else
return A+multiply(A,B-1);
}
不知道现在改对了没有,力扣评论区内有好多和我犯过同样错误的!!!!
力扣 29. 两数相除
真的不会,对不住啦!!!
int divide(int dividend, int divisor){
return dividend/divisor;
}
力扣 50. Pow(x, n)
超时解法.....
double myPow(double x,int n)
{
int m;
double s=1;
if(n>0)
m=n;
else
m=-n;
if(m>0)
while(m--)
{
s*=x;
}
else if(m==0)
return 1;
if(n>0)
return s;
else
return 1.0/s;
}
评论区有那个快速幂!!!!!!(不会!!!!)
力扣 69. Sqrt(x)
评论区的暴力解法!!!!!
int mySqrt(int x){
long int a;
for(a=1;x>=a*a;++a)
continue;
return a-1;
}
大部分都是用更高效的二分查找,我也不会!!!!等第二次进阶再看吧!!!加油!!!!
力扣 面试题 16.07. 最大数值
int maximum(int a, int b){
return a>b?a:b;
}
真的好累了,写了两个小时了,好多知识其实还没有太明白!!!
————————————————————————————————————————————————————————————————
来一个总结吧:
好累简单写写
1.第一考虑情况不全面,负数几乎没考虑,就更别提数据大小溢出没溢出了!
2.不会的知识点有 位运算——加法 快速幂——次幂 二分查找——开方 对于两数相除不知道到底该用什么只是算呢
好了,今天还是很棒的!!!