相关疑难解决方法(0)

为什么一个字节只有0到255?

为什么一个字节的范围只有0到255?

binary byte

32
推荐指数
6
解决办法
5万
查看次数

另一种在不使用"*"运算符的情况下将两个数相乘的方法

昨天我进行了一次有趣的采访,面试官问我一个经典问题:如何在不使用*运算符的情况下将Java中的两个数字相乘.老实说,我不知道这是采访带来的压力,但我无法提出任何解决方案.

面试结束后,我回到家中,通过SO轻松寻找答案.到目前为止,我发现了以下内容:

第一种方法:使用For循环

// Using For loop
public static int multiplierLoop(int a, int b) {
    int resultat = 0;
    for (int i = 0; i < a; i++) {
        resultat += b;
    }

    return resultat;
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:使用递归

// using Recursion
public static int multiplier(int a, int b) {

    if ((a == 0) || (b == 0))
        return 0;
    else
        return (a + multiplier(a, b - 1));

}
Run Code Online (Sandbox Code Playgroud)

第三种方法:使用Log10

**// Using Math.Log10
public static double multiplierLog(int …
Run Code Online (Sandbox Code Playgroud)

java

24
推荐指数
4
解决办法
9562
查看次数

快速bignum平方计算

为了加快我的bignum除数,我需要加速y = x^2bigints的操作,bigints被表示为无符号DWORD的动态数组.要明确:

DWORD x[n+1] = { LSW, ......, MSW };
Run Code Online (Sandbox Code Playgroud)
  • 其中n + 1是使用的DWORD的数量
  • 所以数量的价值 x = x[0]+x[1]<<32 + ... x[N]<<32*(n)

问题是:如何在y = x^2没有精度损失的情况下尽快计算? - 使用C++和整数算术(32位带Carry)处理.

我目前的方法是应用乘法y = x*x并避免多次乘法.

例如:

x = x[0] + x[1]<<32 + ... x[n]<<32*(n)
Run Code Online (Sandbox Code Playgroud)

为简单起见,让我重写一下:

x = x0+ x1 + x2 + ... + xn
Run Code Online (Sandbox Code Playgroud)

其中index表示数组内的地址,因此:

y = x*x
y = (x0 + x1 + x2 + ...xn)*(x0 + x1 + x2 + ...xn)
y = x0*(x0 …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm multiplication bignum sqr

14
推荐指数
1
解决办法
3557
查看次数

以有效的方式乘以7

我最近遇到了以下面试问题:

如何以高效优化的方式将数字乘以7?

我知道我可以乘以8(或左移三位)然后减去原始值:

num = (num << 3) - num;
Run Code Online (Sandbox Code Playgroud)

但还有其他解决方案.

c

9
推荐指数
3
解决办法
3293
查看次数

标签 统计

algorithm ×1

bignum ×1

binary ×1

byte ×1

c ×1

c++ ×1

java ×1

multiplication ×1

sqr ×1