历时42天终于刷完了PTA乙级的所有题目,所以对于只想考乙级证的兄弟们,不要慌,一天两道题绝对很快就搞定了,40天就可以刷完所有题目而且可以轻松应付考试。
但对于浙江大学来说,真正可以代替机试的只有甲级考试,所以我们还是要继续坚持两个月左右,把甲级115道题全部刷完,一起加油互相监督。
将给定的两个数字相加,并要输出为一种特殊的形式,即从后往前,每三个数字就会使用一个逗号分隔开。
题目比较简单吧,但是有几个坑点:
1.我们将两数字单纯相加,不用担心,不会溢出,然后将数字转化成字符串形式。在这里说明一下,大家常用的itoa在PTA中是不合法的,即使在自己的编译环境下可以通过,但是在PTA上会编译报错。所以我们使用的是另一种将数组转换为字符数组的函数snprintf.
2.如图两数相加为负数,则字符数组第一个位置是’-’,所以我们真正找数字的时候应该跳过这个字符。
首先先计算出数字的长度,遍历我们的字符数组,如果开头为’-'则跳过。如果当前字符是一个数字我们就将长度+1.最后算出长度,长度的作用主要是为了方便我们从后往前遍历字符数组,因为我们要保证每三个数字中间有一个逗号。
从后向前遍历数组,将每个字符加入一个vector容器中,每加入三个再额外添加一个",",最后将vector反转输出即可。
#include
#include
#include
#include
using namespace std;
int main()
{
int a,b;//字符串形式输入两个数字
cin>>a>>b;
int res = a+b;
char s[25];
vector<char>ans;
snprintf(s, sizeof(s), "%d", res);
int j = (s[0] == '-') ? 1 : 0;
while(isdigit(s[j]))
{
j++;
}
int count = 0;
for(int i = j - 1;i>=0;i--)
{
if(count % 3 == 0 && count >= 3 && isdigit(s[i]))
{
ans.push_back(',');
ans.push_back(s[i]);
}
else
ans.push_back(s[i]);
count++;
}
reverse(ans.begin(),ans.end());
for(int i = 0;i < ans.size();i++)
cout<<ans[i];
return 0;
}
答题用时13min
Q1——finish√