求解字符串中,所有数字串的乘积: 2 @ 2 @ 3 @ 13
2@2@3@132@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);
正解~~~~但是为什么要用大整数呢?转换成普通的整型数据也可以吧。。。 --------------------编程问答-------------------- 看别人回答自己也能学到好多东西, --------------------编程问答--------------------
可以啊。但是大整数的精确度更高,据说如果内存支持,多少位的数字都能表示 --------------------编程问答-------------------- 楼主, 你好。楼上说的都是正确的 --------------------编程问答-------------------- 可以大致估算下,乘积的大小,一般的不涉及到多位数阶乘的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);
}
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