B. T2: 提取数字

【题目描述】

给定一个字符串,请你提取出字符串中的所有数字,并且将每个数字加上 5 之后再求和。 请注意:数字可能包含前导零,详见样例 2。保证所有数字之和在 long long 的范围内

【输入格式】

首先输入一个数字表示测试点编号(如果是 −1 则表示是样例),然后输入一个长度不超过

10^5 的字符串。

【输出格式】

输出一行一个整数表示答案。

【样例 1 输入】

−1 a5b3c2

【样例 1 输出】

25

【样例 2 输入】

−1 a00321b

【样例 2 输出】

326

【备注】

测试点1-2:仅包含数字

测试点3-6:不包含数字0

测试点7-8:仅包含一个字母

测试点9 − 10: 无特殊性质

【思路】


这道题其实就是说,先输入一个编号(其实编号没什么用),再输入一个字符串。把其中的数字提取出来,把每个数加5,再求和就可以了。

【样例解释】

样例1:编号为-1,字符串为a5b3c2,提取数字为5,3,2。每个数都加上5为10,8,7。和为25
样例2:编号为-1,字符串为a00321b,提取数字为321。加上5为326。和为326


【错误原因】


这道题其实非常的简单,但读不懂题是导致错误的主要原因。通过个人思考,我觉得错误原因其实有一下几点
1.没有写freopen或写错了
2.把编号也当做字符串了
3.未读懂题意,不知道连续数字是一个数


【代码实现】


1.初始框架 

#include<bits/stdc++.h>
using namespace std;
int main(){
    freopen("collect.in","r",stdin);//freopen是文件读写,题目要求是写的
    freopen("collect.out","w",stdout);
    return 0;
}

2.提取数字

for(int i=0;i<=len;i++){
    if(n[i]>='0'&&n[i]<='9'){//判断字符串中是否是数字
        sum=0;//用来记录每一个数
        while(n[i]>='0'&&n[i]<='9'){//因为数可能是一个多位数,所以要用while
            sum=sum*10+(n[i]-'0');//把每一个数字组成一个多位数
            i++;
        }
        ans+=sum+5;//ans用于记录最终的答案,加5是题目所要求
    }
}

3.注意

//输入时切记在输入字符串之前先输入编号

//len用于记录字符串的长度,如果字符串是string类型的,len应等于a.size(),如果是char类型的,len应等于strlen(a)。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值