CodeChef C++竞赛编程:如何实现多测试用例?
解决多测试用例下整数首尾数字之和的问题
原代码存在的问题
- 未读取题目要求的测试用例数
T,直接读取单个整数N - 存在冗余的
for循环:获取首尾字符不需要遍历整个字符串,直接通过索引即可拿到 - 缺少处理多测试用例的循环逻辑,仅能处理单个输入
- 输出结果无换行,多个测试用例的结果会连在一起,不符合竞赛题输出格式要求
修改后的实现思路
- 先读取测试用例数
T - 通过循环执行
T次处理流程:- 每次循环读取一个整数
N - 将
N转为字符串后,直接取第一个字符(索引0)和最后一个字符(可用convert.length()-1或convert.back()) - 利用字符ASCII码特性转整数(
字符 - '0'),比stoi更简洁高效 - 计算首尾数字之和并输出,每次输出后换行
- 每次循环读取一个整数
修改后的完整代码
#include <iostream> #include <string> using namespace std; int main() { int T; // 读取测试用例数 cin >> T; // 循环处理每个测试用例 while (T--) { int N; cin >> N; string convert = to_string(N); // 直接取首尾字符并转成整数 int firstDigit = convert[0] - '0'; int lastDigit = convert.back() - '0'; int total = firstDigit + lastDigit; cout << total << endl; } return 0; }
额外说明
while(T--)是竞赛中常用的写法,每次循环T自减1,直到T为0时结束,逻辑简洁高效- 字符转整数用
convert[0] - '0':'0'到'9'的ASCII码连续,减去'0'的ASCII值就能得到对应数字,比调用stoi更直接 - 输出加
endl确保每个测试用例结果单独占一行,符合竞赛题输出规范
内容的提问来源于stack exchange,提问作者cindicate
相关产品推荐
相关产品推荐

