我怎么去做算术,+ - /*%!,任意大整数而不使用java.math.BigInteger
?
例如,factorial为90在Java中返回0.我希望能够解决这个问题.
例如,我如何能够转换2^60
或12345678901234567890123456789012345678901234567890
二进制?基本上,数字太大而无法用Java表示.
编辑:我将创建一个能够代表太大的数字的类.我只是很难确定如何将十进制转换为二进制.
Edit2:而且,我不允许使用BigDecimal,BigInteger或任何其他库,抱歉没有提前指定.
我必须测试,看看这种方法是否已经改组了一副牌.这里如果代码为实际的洗牌部分.
public void randomShuffle () {
for (int i = 0; i < DECK_SIZE; i++) {
int place = (int)((Math.random()*(51-i))+i);
Card temp = this.cardAt(i);
this.cardList[i] = this.cardAt(place);
this.cardList[place] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
测试它是否被洗牌的问题是我只能切换两张卡而且它会被认为是洗牌.这是我到目前为止对随机shuffle的测试.
static void randomShuffleTest () {
Deck deck1 = Deck.newDeckOf52();
Deck deck2 = Deck.newDeckOf52();
deck2.randomShuffle();
assert false == deck1.equals(deck2);
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,我如何测试某些东西是否已被洗牌?
这是我运行程序的几天假.关于我做错的任何建议?
我知道有一种更简单的方法可以做到这一点,但为此,我试图展示找到它们之间的所有实际步骤.
家庭作业,所以不能使用日期时间库.
public class DaysBetween {
public static void main (String []args) {
long months1 = Long.parseLong(args[0]);
long days1 = Long.parseLong(args[1]);
long year1 = Long.parseLong(args[2]);
long months2 = Long.parseLong(args[3]);
long days2 = Long.parseLong(args[4]);
long year2 = Long.parseLong(args[5]);
long daysbetween = 0;
long leapyearcounter = 0;
boolean leapyear1 = false;
boolean leapyear2 = false;
boolean valid1 = true;
boolean valid2 = true;
int earlier = 0;
// this tests to see which date is earlier
if (year1 == year2){
if …
Run Code Online (Sandbox Code Playgroud)