CSDN=>FAQ=>FAQ 展示
  • 问题内容:不用+,-,*,/,自行设计整数的四则运算函数add(),sub(),multi(),div()
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=3721076
  • 所属论坛:数据结构与算法     审核组:其他
  • 提问者:Disaster     解决者:taolei
  • 感谢:taolei
  • 关键字:专题开发/技术/项目 数据结构与算法
  • 答案:

    这是一道华为试题,哪位大哥帮我解决一下

    我们一直算术中的四则运算在高级语言中有相应的运算符号+,-,*,/,现在请你运用已经学过的知识,自行设计整数的四则运算函数add(),sub(),multi(),div()来实现相应的计算(在函数中不能使用+,-,*,/)
    如add(3,5)返回8,sub(4,1)返回3,multi(2,7)返回14,div(1,3)返回0.3(在divz()函数中程序不可使用实形变量)

    ---------------------------------------------------------------

    int add(int a,int b)
    {
    int r = 0;
    int c = 0;
    for(int i=1;i != 0;i<<=1)
    {
    r |= (a^b^c) & i;
    c = (((a&b) | (b&c) | (a&c)) & i)<<1;
    }
    return r;
    }
    int sub(int a,int b)
    {
    int r =0;
    int c= 0;
    for(int i=1;i!=0;i<<=1)
    {
    r |= (a^b^c) & i;
    c = ((~a&(b|c)) | (a&b&c))<<1;
    }
    return r;
    }
    int mul(int a,int b)
    {
    int r = 0;
    for(int i=1;i!=0;i<<=1,a<<=1)
    {
    if (b & i)
    r = add(r,a);
    }
    return r;
    }
    float div(int a,int b)
    {
    int r = 0;
    if (b == 0)
    {
    if (a == 0)
    {
    r = 0xffc00000;//-1.#IND0
    }
    else
    {
    if(a < 0)
    r = 0xff800000;//-1.#INF0
    else
    r = 0x7f800000;//1.#INF0
    }
    }
    else if(a != 0)
    {
    int sign = 0;
    if (a < 0)
    {
    sign =1;
    a = -a;
    }
    if (b < 0)
    {
    sign ^= 1;
    b = -b;
    }
    int ext = 127;
    int bit = 0x40000000;
    while((a&bit)==0)
    {
    a <<= 1;
    ext = sub(ext,1);
    }
    while((b&bit)==0)
    {
    b <<=1;
    ext = add(ext,1);
    }
    unsigned x = (unsigned)a;
    unsigned y = (unsigned)b;
    if (x < y)
    {
    ext = sub(ext,1);
    x<<=1;
    }
    for(bit=1<<23;bit>0;bit>>=1)
    {
    r <<= 1;
    if (x >= y)
    {
    x = sub(x,y);
    r |= 1;
    }
    x <<= 1;
    }
    if (x >= y)
    {
    r = add(r,1);
    if ((r & 0x1000000) != 0)
    {
    ext = add(ext,1);
    r >>=1;
    }
    }
    r = (sign << 31) | (ext<<23) | (r & 0x7fffff);
    }
    return *(float*)&r;
    }

  • 评价: 有价值 给朵鲜花(56) 无价值 扔个鸡蛋(18)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo