诺亚方舟——第一天

第一天
!!!!!!!!!!学习内容
————————————————————————————————————
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.不会的知识点有   位运算——加法  快速幂——次幂  二分查找——开方  对于两数相除不知道到底该用什么只是算呢
好了,今天还是很棒的!!!
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值