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

纸上写着一列自然数 1,2,3.......1228,1229,1230。称如下过程为一次操作:将这列数中最左边的两个数划去,然后把这两个数的乘积写在数列的最右边。
例如第一次操作后得到3,4,5......1228,1229,1230,2。而第二次操作后得到5,6,7.....1228,1229,1230,2,12。重复操作直到剩下一个数,这个数德
的末尾共有_____个连续的0。(ps:用java程序来实现)

package eg;

import java.util.LinkedList;

public class TTTTT {

public static void main(String[] args) {

LinkedList<Integer> 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<Integer> 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 也得崩。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-13
@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追问

能不能加个注释啊

追答

回答又超出最大字数限制了。。。这个问题要注意的就是值太大,超出了int和double的范围。所以使用String类型,自定义了一个乘法,模仿科学计数法。使用了队列,链表实现

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网