首页 > 试题广场 >

解析加减法运算

[编程题]解析加减法运算
  • 热度指数:6483 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
解析加减法运算
如:
输入字符串:"1+2+3" 输出:"6"
输入字符串:"1+2-3" 输出:"0"
输入字符串:"-1+2+3" 输出:"4"
输入字符串:"1" 输出:"1"
输入字符串:"-1" 输出:"-1"

已知条件:输入的运算都是整数运算,且只有加减运算
要求:输出为String类型,不能使用内建的eval()函数

数据范围:计算过程中所有值满足 ,输入的字符串长度满足

输入描述:
输入字符串:"1+2+3"


输出描述:
输出:"6"
示例1

输入

1+2+3

输出

6
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s=in.next();
        s=s.replaceAll("-","+-");
        int sum=0;
        String si="";
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='+'){
                if(si.equals("")) continue;
                sum+=Integer.parseInt(si);
                si="";
            }else{
                si+=s.substring(i,i+1);
            }
        }
        sum+=Integer.parseInt(si);
        System.out.printf("%d",sum);
    }
}

发表于 2023-09-05 23:20:05 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        if(!String.valueOf(str.charAt(0)).equals("+")&&!String.valueOf(str.charAt(0)).equals("-")){
            str="+"+str;
        }
        int start=0;
        ArrayList<String> list=new ArrayList<String>();
        for(int i=1;i<str.length();i++){
            if(String.valueOf(str.charAt(i)).equals("+")||String.valueOf(str.charAt(i)).equals("-")){
                list.add(str.substring(start,i));
                start=i;
            }
        }
        int n=str.length();
        list.add(str.substring(start,n));
        int result=0;
        for(int i=0;i<list.size();i++){
            if(String.valueOf(list.get(i).charAt(0)).equals("+")){
                result+=Integer.parseInt(list.get(i).substring(1,list.get(i).length()));
            }else{
                result+=Integer.parseInt(list.get(i).substring(1,list.get(i).length()))*(-1);
            }
        System.out.println(result);
    }
}


对输入的字符串进行截取,首先对字符串首个位置进行符号填充,无符号的添加负号。随后按照符号对字符串进行截取。针对每个截取的字符串,判断首字母正负,将数字部分化成数字,进行乘法计算再相加
发表于 2020-04-27 22:44:16 回复(0)
  • 分割字符串,按符号分割的话,就得到一个保存数字的数组;按数字分割的话,就得到一个保存运算符号的数组

  • 因为补了加号,所以符号的个数和数字的个数是相同的。

  • 从符号数组中拿出一个符号,再从数字数组中拿出一个数,两者进行结合,就得到了一个包含符号的数字,把这个数字放入list集合中。

  • 遍历list集合,累加求和即可得出答案。

  • PS:正则表达式分割字符串时,可能会产生空字符串“”,要把空字符串去掉。代码中的

    noEmptyString()方法就是用来去除空字符串的。

    import java.util.*;
    public class Main
    {
       public static void main(String [] args)
       {
           Scanner sc=new Scanner(System.in);
           while(sc.hasNext())
           {
               String str=sc.next();
               String str2=str;
               if(!(""+str.charAt(0)).matches("-"))
               {
                   str2="+"+str;//把加号补上
               }
               Object [] array1=noEmptyString(str2.split("[\\-\\+]"));//保存数的数组
               Object [] array2=noEmptyString(str2.split("[0-9]+"));//保存符号的数组
    
               List<Integer> list=new LinkedList<>();
               for(int i=0;i<array2.length;i++)
               {
                   String oper=(String)array2[i];
                   String num=(String)array1[i];
                   String total=oper+num;  
                   int c=Integer.parseInt(total);
                   list.add(c);
               }
               int sum=0;
               for(int item:list)
               {
                   sum+=item;
               }
               System.out.println(sum);
    
           }
       }
    
       public static Object[] noEmptyString(String [] array)
       {
           List<String> list=new LinkedList<>();
           for(int i=0;i<array.length;i++)
           {
               String item=array[i];
               if(!item.equals(""))//如果不为空字符串
               {
                   list.add(item);
               }
           }
           return list.toArray();
       }
    }
编辑于 2020-02-14 19:03:35 回复(0)
//注意题目描述的输入左右是带双引号的,但是实际示例输入是没有带双引号的
//我一开始没注意到这一点,然后就按照带双引号处理,其实代码也就是稍微改动一下,就是感觉有点坑
//你可以通过自测按钮,看看电脑到底是要求什么输入和输出的

//算法思路:1、首先将读入的字符串按照+、-拆分开,这样就得到了字数,当然数字是以字符串形式存储的,后面转换成数字即可
//2、然后遍历该字符串,找到那些符号,也就只有加号和减号,分两种情况讨论即可。
//3、这里值得注意的是,开头是减号或者开头是数字,我分成了两种情况讨论。

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String  str2 = input.nextLine();		
		int count = 0;
		
        //开头如果是减号,求出count
		if(str2.charAt(0) == '-') {
            //碰到+、*、|、\分割时需要在前面加\\或者用中括号[]包起来。碰到双引号就有\
			String[] str3 = str2.split("\\+|-");
            //因为是第一个数字,这里单独处理,后面的数字根据符号依次加上或者减去即可
			count -= Integer.parseInt(str3[1]);
			int k = 2;
			for(int i=2; i<str2.length(); i++) {
				if(str2.charAt(i) == '+') {
					count += Integer.parseInt(str3[k]);
					k++;
				}
				if(str2.charAt(i) == '-') {
					count -= Integer.parseInt(str3[k]);
					k++;
				}
			}
		}
		
        //开头如果是数字,求出count
		if(str2.charAt(0) != '-') {
			String[] str3 = str2.split("\\+|-");
			count += Integer.parseInt(str3[0]);			
			int k = 1;
			for(int i=1; i<str2.length(); i++) {
				if(str2.charAt(i) == '+') {
					count += Integer.parseInt(str3[k]);
					k++;
				}
				if(str2.charAt(i) == '-') {
					count -= Integer.parseInt(str3[k]);
					k++;
				}
			}
		}		
		System.out.println(count);
	}
}

发表于 2019-08-29 18:07:48 回复(0)