题目描述

输入字符串s,输出s中包含所有整数的最小和。
说明:
字符串s,只包含 a-z A-Z ± ;
合法的整数包括

  • 正整数 一个或者多个0-9组成,如 0 2 3 002 102
  • 负整数 负号(-) 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023

输入描述

包含数字的字符串

输出描述

所有整数的最小和

输入bb12-34aa
输出-31
说明1+2+(-34) = -31

Python算法源码

import re

# 计算整数各个位数之和
def get_num_sum(num):
    return sum(int(digit) for digit in num)

if __name__ == "__main__":
    # 监听控制台输入
    while True:
        line = input()
        num_arr = re.split(r'[^\d-]+', line)
        res = 0
        for num in num_arr:
            if num:
                if '-' not in num:
                    # 处理正整数
                    res += get_num_sum(num)
                else:
                    # 处理负整数
                    is_neg = num.startswith('-')
                    sub_num_arr = num.split('-')拜拜
                    for i in range(len(sub_num_arr)):
                        if sub_num_arr[i]:
                            ele = int(sub_num_arr[i])
                            if i == 0:
                                res += -ele if is_neg else get_num_sum(sub_num_arr[i])
                            else:
                                res -= ele
        print(res)

C语言算法源码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

// 计算整数各个位数之和
int getNumSum(const char *num) {
    int sum = 0;
    for (int i = 0; num[i] != '\0'; i++) {
        sum += num[i] - '0';
    }
    return sum;
}

int main() {
    char line[1000];
    fgets(line, sizeof(line), stdin);
    line[strcspn(line, "\n")] = '\0'; // 移除换行符

    char *token;
    int res = 0;

    // 定义用于正则表达式分割的标记字符串
    const char *delim = "[^0-9-]+";
    // 使用strtok函数分割字符串
    token = strtok(line, delim);
    while (token != NULL) {
        char *num = token;

        if (strlen(num) > 0) {
            if (strchr(num, '-') == NULL) {
                // 处理正整数
                res += getNumSum(num);
            } else {
                // 处理负整数
                char *ptr = strtok(num, "-");
                bool isNeg = false;
                while (ptr != NULL) {
                    int ele = atoi(ptr);
                    if (!isNeg) {
                        res += ele;
                        isNeg = true;
                    } else {
                        res -= ele;
                    }
                    ptr = strtok(NULL, "-");
                }
            }
        }
        token = strtok(NULL, delim);
    }
    printf("%d\n", res);
    return 0;
}

Java算法源码

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    // 计算整数各个位数之和
    public static int getNumSum(String num) {
        int sum = 0;
        for (char c : num.toCharArray()) {
            sum += Character.getNumericValue(c);
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine().trim();
        Pattern pattern = Pattern.compile("-?\\d+");
        Matcher matcher = pattern.matcher(line);
        int res = 0;
        while (matcher.find()) {
            String num = matcher.group();
            if (!num.isEmpty()) {
                if (!num.contains("-")) {
                    // 处理正整数
                    res += getNumSum(num);
                } else {
                    // 处理负整数
                    boolean isNeg = num.startsWith("-");
                    String[] subNumArr = num.split("-");
                    for (int i = 0; i < subNumArr.length; i++) {
                        if (!subNumArr[i].isEmpty()) {
                            int ele = Integer.parseInt(subNumArr[i]);
                            if (i == 0) {
                                res += isNeg ? -ele : getNumSum(subNumArr[i]);
                            } else {
                                res -= ele;
                            }
                        }
                    }
                }
            }
        }
        System.out.println(res);
    }
}
最后修改:2024 年 04 月 03 日
如果觉得我的文章对你有用,请随意赞赏