【题目描述】
给定一个字符串,请你提取出字符串中的所有数字,并且将每个数字加上 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)。