我在网上发现了一个挑战,并认为它非常有趣,但多次尝试了解基地3是什么以及你如何到达那里,但遗憾的是没有线索如何。
编写一个方法convertIntegerToBase3(),它执行以下操作:
- 接受整数参数(从0到26)并将其转换为存储的基数3 作为字符串,这是返回值。
public String convertIntgerToBase(int num){
if(numberConv >= 0 && numberConv <= 26){
//What do I do here?
}
else{
System.out.println("Error! Number entered wasn't in the range of 0 and 26);
}
}
答案 0 :(得分:2)
更新
由于以下答案仅适用于10号基础,我提出了以下答案,该答案适用于36号基地:
private static final char[] CHARS = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
private static String convertIntToBase(int i, int base){
final StringBuilder builder = new StringBuilder();
do{
builder.append(CHARS[i % base]);
i /= base;
} while(i > 0);
return builder.reverse().toString();
}
逻辑保持不变,但现在通过访问CHARS
数组,我们可以达到基数36.因为我们现在有了整个字母和数字来在另一个基数中创建一个新数字。
现在使用它将产生正确的数字,例如基地16:
convertIntToBase(255, 16);
将返回正确的十六进制值:
ff
<强>旧强>
非常简单,通过划分和使用基数的其余部分,也可以通用:
public String convertIntToBase(int i, int base){
final StringBuilder builder = new StringBuilder();
do {
builder.append(i % base);
i /= base;
} while(i > 0);
return builder.reverse().toString();
}
然后可以像下面这样使用:
convertIntToBase(24, 3);
哪个收益率:
220
这有效,如除法和余数(模数)所述。使用样本编号24
,我们可以非常轻松地完成这些步骤。迭代和计算(i /= base) % base
可以分为以下几部分:
i
除以base
(i /= base
)i
与base
(i % base
)i
大于零,则重复因此,对于i = 24
和base = 3
,它会执行以下步骤:
为您留下已知结果:220
答案 1 :(得分:1)
Base 3简单地将一个数字表示为多项式的数,其中多项式的基数为3.它可以扩展到所有基础,如基数1.2,基数99 ......等。
Number in Decimal = (A0)*3^0 + (A1)*3^1 + (A2)*3^2 ...
where AX can have in value that falls with in (x)mod(3) or
(x)mod(base). In your case a range of [0,1,2]. (x)mod(Anything) is
always positive or zero.
尝试思考如何用你的基础来猜测,但是,它本质上是一个要求你划分数字的问题。如果您知道如何将整数除以该多项式,那么您已经找到了问题。