有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java不使用*运算符将数字相乘

我正在上一堂编程课,有人问了我一个棘手的问题,这个问题一直到课程结束都没有答案

问题

如何将任何输入(浮点、整数等)乘以7, without using the*运算符 在TWO steps

如果有人能给我这个问题的答案和解释,那将是非常有帮助的

With TWO STEPS I mean suppose you are running a loop (i=0;i<7;i++) in that case number of steps will be >2, also TYPE CONVERSION, DIVISION,ADDITION etc ( Counts for steps ).


共 (6) 个答案

  1. # 1 楼答案

    您可以简单地使用七分之一除法:

    x / (1.0 / 7)
    

    这是否算作“两步”完全取决于您的定义

  2. # 2 楼答案

    // String num = "10";
    // int num = 10;
    float num = 10;
    
    BigDecimal bigD = new BigDecimal(num);
    BigDecimal seven = new BigDecimal(7);
    System.out.println(seven.multiply(bigD));
    

    您可以使用BigDecimal&;它的multiply方法。几乎所有东西都能用

  3. # 3 楼答案

    您还可以对整数执行以下操作:

    ( x<< 3) - x
    
  4. # 4 楼答案

    在C中,以下hack应该适用于IEEE single precision floating point format中存储的浮点:

    #include <stdint.h>
    
    float mul7 (float x) {
        union {
            float f;
            uint32_t i;
        } u;
        u.f = x;
        u.i += (3 << 23);  /* increment exponent by 3 <=> multiply by 8 */
        return u.f - x;    /* 8*x - x == 7*x */
    }
    

    这是两个步骤(一个整数加法,一个浮点减法),这取决于你计算的步骤。考虑到C++或多或少地与C兼容,我相信类似的技巧也应该是可能的。p>

    然而,请注意,对于subnormal、无限或NaN输入,这种黑客通常不会给出正确的结果,对于大小如此之大以至于将它们乘以8将溢出的输入,也不会给出正确的结果

    将代码调整为使用double而不是float留给读者作为练习。(提示:魔法数字是52。)

  5. # 5 楼答案

    假设在作用域中定义了float xdouble x。然后,我看到了在不使用*运算符的情况下将其乘以7的以下可能性:

    在C++中,可以使用标准的函子(第一步:创建函子,第二步:调用函子):

    x = std::multiplies<float>()(x, 7.0f);  // if x is a float
    x = std::multiplies<double>()(x, 7.0);  // if x is a double
    

    或者只使用除法(因为编译器已经计算了1.0 / 7.0,这只是一个步骤):

    x = x / (1.0f / 7.0f);  // if x is a float
    x = x / (1.0  / 7.0);   // if x is a double
    

    或者使用*=操作符(从技术上讲,它不是*操作符,但它只是一个步骤):

    x *= 7.0f;  // if x is a float
    x *= 7.0;   // if x is a double
    

    或者在对数刻度中使用加法(这不是非常严重的,因为这需要两个以上的“步骤”):

    x = exp(log(x) + log(7.0));
    

    另一种选择是使用汇编指令,但我现在不想写它,因为它太复杂了

    如果x是一个整数,则位移位是另一个选项,但不推荐

    x = (x << 3) - x;   // (x * 8) - x
    
  6. # 6 楼答案

    加上

    //initialise s as the number to be multiplied
     sum=0
    for(i=0;i<7;i++)
        sum+=s