hdu 2424
来源:互联网 发布:unity3d wsd人物行走 编辑:程序博客网 时间:2024/05/17 23:21
用java写高精度虽然简单,但是其中的原理必须得想清楚了!
这个题目是给出一个算式,期中只有数字 ,加号,乘号,空格这四种种元素。通过这个算式计算出一个结果。基本思想就是:用next()一个元素一个元素的读取,其中读到空格的地方表示一个标记被完全读取!对于不同的标记,有不同的处理方法!
这个题目有几个规律性的地方需要提一下:
1 一个算式的标记出空格和回车外一定是有奇数个的;
2忽略空格,从键盘输入的偶数个标记一定是一个数字(因为数组的下标是从0开始的),而奇数个字符必定是加号或者乘号,不符合这个规定的必定得不出结果。
3如果此时输入的数字,要查看其前边输入的是否为乘号,如果是直接可以相乘,符合运算法则;如果此时输入的是加号的话,那么其上次输入的加号就可以进行运 算了。所以此时标志数字的那个变量
import java.math.BigInteger;import java.util.Scanner;public class Main2424 {public static void main(String[] args){Scanner cin = new Scanner(System.in);int n; //用来指示表达式中的符号String[] f = new String[30]; //字符数组BigInteger[] num = new BigInteger[30]; //大数数组String str;long k = 0;f[0] = "1";while(cin.hasNext()){int flag = 1,ntop = 0,stop = 0;k++; //用来标记第几个测试用例n=cin.nextInt();if(n%2==0)flag=0; //flag 标志变量for(int i=0; i<n; i++){str = cin.next(); //查找并返回此扫描器的第一个标记 也就是扫描一行中的第一个标记 遇到空格扫描结束if(flag == 0)continue; //至少能表示扫描的不是第一个标记if(i%2==0&&(!str.equals("+")&&(!str.equals("*")))){//表示第二个字符不是+ 或者 *的处理 如何是数字而不是* +表示合理BigInteger w = new BigInteger(str); //调用大数的构造方法 将字符串转换成大数num[++ntop] = w; //在数组的第一个位置存储下这个大数if(f[stop].equals("*")){ //stop是用来标记+和*的位置的 至少在第一次时候不会执行这一句num[ntop-1] = num[ntop].multiply(num[ntop-1]);//高精度乘法ntop--;stop--;}}else if(i%2!=0&&(str.equals("+")||str.equals("*"))){//对于是+或者*而不是数字的处理f[++stop] = str; //将这个字符串保存下来if(f[stop].equals("+")&&ntop>1){ //如果是+表示当前的数字需要同前面的数字先进行运算了num[ntop-1] = num[ntop].add(num[ntop-1]);ntop--;stop--;}}else {flag = 0;}}while(flag!=0&&stop>0){if(f[stop].equals("+"))num[ntop-1] = num[ntop].add(num[ntop-1]);else if(f[stop].equals("*"))num[ntop-1] = num[ntop].multiply(num[ntop-1]);stop--;}if(flag == 0)System.out.println("Case "+k+": "+"Invalid Expression!");elseSystem.out.println("Case "+k+": "+num[1]);}}}
的值必须是大一1的,这样才能够说明前边有加号存在!
- hdu 2424
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- Linux中 oracle SQL*PLUS 命令大全
- DTO层的思考
- 3D Max Mesh Smooth at render time
- String与StringBuffer的区别?
- 《service》-“linux命令五分钟系列”之二
- hdu 2424
- 每天一道笔试题-2012年3月1日
- 在spring中配置多数据库读取
- Spring Security学习总结
- iReport的style使用举例
- MFC之命令更新
- visual studio 2010 运行后 不显示按任意键退出,窗口直接消失
- asp.net 获得客户端IP地址
- MFC 对话框程序如何添加目录,工具栏,状态栏