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

黄蒲 2013-10-05 12:07:25
2@2@3@13
2@2@3@4@13

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

2 * 2 * 3 * 13 = 156

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

在线等,谢谢高手了.
...全文
361 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
郑涛 2013-10-14
  • 打赏
  • 举报
回复
这题目,有啥技术含量啊,你不如问表达式求值3+5*(5+3)=? split("\\D+"),以所有非数字隔开
sunbo624 2013-10-12
  • 打赏
  • 举报
回复
上面的 打印数字的逆序和结果 [4, -11, 6, 2, 1, 2] -1056
sunbo624 2013-10-12
  • 打赏
  • 举报
回复
楼上说的都有问题 因为忽略了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);
姜小白- 2013-10-08
  • 打赏
  • 举报
回复
可以大致估算下,乘积的大小,一般的不涉及到多位数阶乘的integer 都可以应付的。
livend 2013-10-08
  • 打赏
  • 举报
回复
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); } }
livend 2013-10-08
  • 打赏
  • 举报
回复
引用 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);
	}
这个可以有
安特矮油 2013-10-08
  • 打赏
  • 举报
回复

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);
	}
阿七哥 2013-10-06
  • 打赏
  • 举报
回复
楼主, 你好。楼上说的都是正确的
CodeYoung7 2013-10-05
  • 打赏
  • 举报
回复
看别人回答自己也能学到好多东西,
俺是小王子 2013-10-05
  • 打赏
  • 举报
回复
引用 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);
正解~~~~但是为什么要用大整数呢?转换成普通的整型数据也可以吧。。。
尘缘udbwcso 2013-10-05
  • 打赏
  • 举报
回复


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);
疯狂熊猫人 2013-10-05
  • 打赏
  • 举报
回复
引用 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);
正解~~~~但是为什么要用大整数呢?转换成普通的整型数据也可以吧。。。[/quote] 可以啊。但是大整数的精确度更高,据说如果内存支持,多少位的数字都能表示

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧