用java程序来算出一个数学问题

2024-11-30 09:45:49
推荐回答(2个)
回答1:

package eg;

import java.util.LinkedList;

public class TTTTT {

public static void main(String[] args) {

LinkedList list = new LinkedList<>();
for (int i = 1; i <= 1230; i++) {
list.add(i);
}
process(list, 2);
System.out.println(list.pop());
}

public static void process(LinkedList list, int numberCount) {
Integer[] array = new Integer[numberCount];
while (list.size() != 1) {
for (int i = 0; i < numberCount; i++) {
array[i] = list.pop();
}
Integer result = 1;
for (Integer i : array) {
result *= i;
}
list.add(result);
}
System.out.println(123);
}

}

这是代码 但是这样算 会崩的。 最后是个0. 换了long 也得崩。

回答2:

@Test
public void run() {
Queue queue = new Queue();
for(int i=1;i<1231;i++) {
queue.in(i+"E0");
}
while(queue.size>1) {
String left_one = queue.out();
String left_two = queue.out();
queue.in(multiply(left_one,left_two));
System.out.println(String.format("one:%s,two:%s", left_one,left_two));
}
System.out.println("****"+queue.out());
}
public String multiply(String i,String j) { // 12E4
String[] vals_i = i.split("E");
String[] vals_j = j.split("E");
double res_tmp = Double.parseDouble(vals_i[0])*Double.parseDouble(vals_j[0]);
double res_e = Double.parseDouble(vals_i[1])+Double.parseDouble(vals_j[1]);
while(res_tmp%10==0) {
res_tmp = res_tmp/10;
res_e++;
}

return res_tmp+"E"+res_e;
}
class Queue{ //链表
int size = 0;
Node head=null,tail=null;
public void in(String value) {
if(this.size==0) {
head = tail = new Node();
head.value = value;
}
else {
Node tmp_node = new Node();
tmp_node.value = value;
tail.next = tmp_node;
tail = tail.next;
}
size++;
}
public String out() {
if(this.size==0) {
return "-1";
}
String result = head.value;
head = head.next;
size--;
return result;
}
}
class Node{
String value;
Node next;
}
最后。。47个,221.38400663856314E47.0