B4128 [信息与未来 2014] 夏令营旗手 题解

· · 题解

这道题有多种解法。我给大家讲一下我的做法。

正文

这道题相信很多人看到题就想到打表,不过代码有点长,所以我提供一种代码很短而且好理解的思路。

小实验

这里我们先不说思路,先做一个小实验。这个小实验就是一个字符转化成数字是多少。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s="ABC";
    for(int i=0;i<s.size();i++)
        cout<<s[i]-'0'<<" ";//对于每一个字符,通过“-‘0’”转化成数字
    return 0;
}

结果是 17,18,19。

所以我们知道了 A 转化成数字为 17,后面的字符一次加一。

那么这个跟我们的题目有什么关系吗?有很大的关系!我们其实可以找这个数字和题目中要求的数字的差是多少,然后统计答案的时候加上这个数就行了。不难发现这个数是 48。

思路

思路其实上文已经说了,这里总结一下。就是说对于这个字符串的每一位字符都转化成数字并且加上 48。最后输出答案。

怎么样?很简单吧!如果实在是不懂的话就直接看代码吧。

#include<bits/stdc++.h>//万能头文件
using namespace std;
string s;//输入数据
long long ans;//最终答案
int main(){//主函数
    cin>>s;//输入字符串
    for(int i=0;i<s.size();i++)//枚举 s 里的每一位字符
        ans+=s[i]-'0'+48;//答案加上这个字符转化成的数字并加上与题目中的差就是这个字符对应的题目中的数字了
    cout<<ans<<endl;//输出答案
    return 0;//结束程序
}