字符串中数字子串的求和
2015-09-28 18:08
513 查看
字符串中数字子串的求和
【题目】
给定一个字符串str,求其中全部数字串所代表的数字之和。
【要求】
1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。
2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。
【举例】
str="",返回36;
str="a-1b--2c--d6e",返回7;
【解答】
【题目】
给定一个字符串str,求其中全部数字串所代表的数字之和。
【要求】
1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。
2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。
【举例】
str="",返回36;
str="a-1b--2c--d6e",返回7;
【解答】
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.next(); System.out.println(numSum(str)); } public static int numSum(String str) { char[] s = str.toCharArray(); int sum = 0;// 所有数字之和 int num = 0;// 保存当前连续的数字 boolean flag = true;// 判断是否为负数,true为正数 for (int i = 0; i < s.length; i++) { int cur = s[i] - '0';// 当前的字符 if (cur >= 0 && cur <= 9) { // 不管cur之前字符是否为数字,累加num num = num * 10 + (flag ? cur : -cur); } else { sum += num;// 遇到不是数字的字符,先把之前的数字num累加到sum num = 0;// 遇到不是数字的字符,将num赋值为0 if (s[i] == '-') {// 判断当前字符是否是'-' if (s[i - 1] == '-') {// 如果当前的'-'的上一个字符也是'-',则将flag取反。 flag = !flag; } else { flag = false;// 如果当前的'-'上一个字符不是'-',需要将flag重新赋值为false } } else { flag = true;// 如果当前字符不是'-',需要将flag重新赋值为true,只有连续的'-'才会累加取反。 } } } sum += num; return sum; } }
相关文章推荐
- 滴滴笔试题(附我的答案)
- 理解Bitcode:一种中间代码
- Ubuntu如何配置网桥 Ubuntu系统配置网桥详细教程
- 关于toast的使用方法总结,程序同一时刻只有一个toast,和toast的样式设置。
- Android bluedroid模块间关系
- 连接异常: Access denied for user 'root'@'localhost' (using password: NO)
- ubuntu 忘记密码的解决方法
- Redis Sentinel的配置和使用
- This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.
- 时间复杂度计算方法
- 端口作用
- ubuntu14.04 flash安装
- 复数乘法是什么?
- 学习笔记:iPhone终极指南、手机端、浏览器各种规范
- Nginx重写规则指南
- 二进制、八进制、十进制、十六进制数之间的转换
- myeclipse2014搭建springMVC+Mybatis+多数据源环境
- VMware的Centos 安装telnet
- 如何正常启动plsql
- [LeetCode]Binary Search Tree Iterator