java - 如何在java中有效地计算这个计算?
问题描述
我想实现以下计算,取一个小于 32 的正整数以获得另一个整数:0 => 0, 1 => 1, 2 => 2, 3 => 4, 4 => 8, 5 => 16, 6 => 32, 7 => 64, 8 => 128, ..., 31 => 1073741824</p>
我可以使用 32 个位置的整数数组。我还可以使用一个表达式,测试为 0,返回 0,左移 n-1 次(抱歉,无法附加代码,编辑器拒绝)。
现在,我正在使用一个静态整数表,我对此很满意。但是,我想知道是否有一种方法可以通过简单的计算来计算结果,该计算的执行速度可能与访问表的速度一样快?
更新。到目前为止,这是我测试过的 4 种解决方案(f1、f2、f3、f4)。在问之前我已经实现了 f1 和 f2 。我在收到答案后测试了 f3 和 f4:
private static final int[] table =
new int[] { 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536,
1<<17, 1<<18, 1<<19, 1<<20, 1<<21, 1<<22, 1<<23, 1<<24, 1<<25, 1<<26, 1<<27, 1<<28, 1<<29, 1<<30 };
private static final int f1( int v ) { return table[v]; }
private static final int f2( int v ) { return v == 0 ? 0 : 1<<(v-1); }
private static final int f3( int v ) { return v == 0 ? 0 : (int)Math.pow( 2, v-1 ); }
private static final int f4( int v )
{
switch ( v )
{
case 0: return 0;
case 1: return 1;
case 2: return 2;
case 3: return 4;
case 4: return 8;
case 5: return 16;
case 6: return 32;
case 7: return 64;
case 8: return 128;
case 9: return 256;
case 10: return 512;
case 11: return 1024;
case 12: return 2048;
case 13: return 4096;
case 14: return 8192;
case 15: return 16384;
case 16: return 32768;
case 17: return 65536;
case 18: return 131072;
case 19: return 262144;
case 20: return 524288;
case 21: return 1048576;
case 22: return 2097152;
case 23: return 4194304;
case 24: return 8388608;
case 25: return 16777216;
case 26: return 33554432;
case 27: return 67108864;
case 28: return 134217728;
case 29: return 268435456;
case 30: return 536870912;
case 31: return 1073741824;
default: return -1;
}
}
解决方案
这个怎么样:
int answer = 0;
if(input == 0)
{
answer = 0;
}
else
answer = (int)Math.pow(2, input-1);
如果输入为0
,则输出将为 0。
如果您的输入是 4,那么您的输出将是2^(4-1)
= 2^3
= 8
推荐阅读
- laravel - 在 Laravel 全局中间件中获取 config/session 的值
- python - 暗网 YOLO 迁移学习并保留老类
- reactjs - 为什么显示错误 [ react-router-dom@5.2.0 需要 react@>=15 的对等点,但没有安装。您必须自己安装对等依赖项。]
- php - Unable to successfully login using custom guard in Laravel
- r - R中2个向量的投影
- javascript - 如何在 TypeScript 中使用带有“declare”关键字的导入?
- asp.net-core - 尝试从相关表中查找名称后,相关表不显示任何内容而不是名称
- ontology - Protege 问题:本体中类的对象属性断言
- vapor - 如何从蒸汽 4 中的连接表中选择所有列?
- html - 如何在 ASP.NET MVC 视图中显示来自 Oracle 数据库的图像?