当前位置:编程学习 > JAVA >>

求解字符串中,所有数字串的乘积: 2 @ 2 @ 3 @ 13

2@2@3@13
2@2@3@4@13

如果求解以上字符串中,所有数字部分的乘积。
例如:2@2@3@13

2 * 2 * 3 * 13 = 156

所有数字部分的乘积。 13 要被看成一个整体,而不是1和3.

在线等,谢谢高手了. --------------------编程问答--------------------


String str = "2@2@3@13";
String[] data = str.split("@");
BigInteger bi = new BigInteger("1");
for(int i = 0; i < data.length; ++i){
bi = bi.multiply(new BigInteger(data[i]));
}
System.out.println(bi);
--------------------编程问答--------------------
引用 1 楼 udbwcso 的回复:


String str = "2@2@3@13";
String[] data = str.split("@");
BigInteger bi = new BigInteger("1");
for(int i = 0; i < data.length; ++i){
bi = bi.multiply(new BigInteger(data[i]));
}
System.out.println(bi);

正解~~~~但是为什么要用大整数呢?转换成普通的整型数据也可以吧。。。 --------------------编程问答-------------------- 看别人回答自己也能学到好多东西, --------------------编程问答--------------------
引用 2 楼 benma378 的回复:
Quote: 引用 1 楼 udbwcso 的回复:



String str = "2@2@3@13";
String[] data = str.split("@");
BigInteger bi = new BigInteger("1");
for(int i = 0; i < data.length; ++i){
bi = bi.multiply(new BigInteger(data[i]));
}
System.out.println(bi);

正解~~~~但是为什么要用大整数呢?转换成普通的整型数据也可以吧。。。

可以啊。但是大整数的精确度更高,据说如果内存支持,多少位的数字都能表示 --------------------编程问答-------------------- 楼主, 你好。楼上说的都是正确的 --------------------编程问答-------------------- 可以大致估算下,乘积的大小,一般的不涉及到多位数阶乘的integer 都可以应付的。 --------------------编程问答--------------------

public static void main(String[] args) throws ScriptException {
String s = "2@2@3@13";
s = s.replaceAll("@", "*");
ScriptEngineManager fac = new ScriptEngineManager();
        ScriptEngine engine = fac.getEngineByName ("JavaScript");
        Object o = engine.eval(s);
        System.out.println(o);
}
--------------------编程问答--------------------
引用 7 楼 abstruct 的回复:

public static void main(String[] args) throws ScriptException {
String s = "2@2@3@13";
s = s.replaceAll("@", "*");
ScriptEngineManager fac = new ScriptEngineManager();
        ScriptEngine engine = fac.getEngineByName ("JavaScript");
        Object o = engine.eval(s);
        System.out.println(o);
}


这个可以有 --------------------编程问答-------------------- import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.ScriptEngine;
public class TestString{

public static void main(String[] args) throws ScriptException {
        String s = "2@2@3@13";
        s = s.replaceAll("@", "*");
        ScriptEngineManager fac = new ScriptEngineManager();
        ScriptEngine engine = fac.getEngineByName ("JavaScript");
        Object o = engine.eval(s);
        System.out.println(o);
    }
} --------------------编程问答-------------------- 楼上说的都有问题
因为忽略了2@@3这种问题,以及别的非数字字符,还有负号
String str = "@2.1@2-6@@-11.@4";

int len = str.length();

LinkedList<Integer> list = new LinkedList<Integer>();

boolean newElement = false, nag = false;

for(int i = 0; i < len; i++) {
char ch = str.charAt(i);

if(ch >= '0' && ch <= '9') {
int num = ch - 48;

if(list.isEmpty()) {
list.addFirst(num);
} else {
if(newElement) {
list.addFirst(num);
} else {
int first = list.removeFirst();
if(nag) {
if(first == '-') {
list.addFirst(-1 * num);
} else {
list.addFirst(first * 10 - num);
}
} else {
list.addFirst(first * 10 + num);
}
}
}
newElement = false;
} else if(ch == '-') {
if(newElement) {
list.addFirst((int) ch);
nag = true;
newElement = false;
} else {
newElement = true;
}
} else {
newElement = true;
nag = false;
}
}

System.out.println(list);

int t = 1;

for(int i : list) {
t *= i;
}

System.out.println(t);
--------------------编程问答-------------------- 上面的  打印数字的逆序和结果
[4, -11, 6, 2, 1, 2]
-1056 --------------------编程问答-------------------- 这题目,有啥技术含量啊,你不如问表达式求值3+5*(5+3)=?
split("\\D+"),以所有非数字隔开
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,