PAT题目1001:
解题思路:
这道题,虽然看起来很简单,但是还是有很多细节要注意的。
因为在运算各个位的时候,低位先得到,高位后得到,而要保证输出的顺序正确,所以采用了栈的结构。
代码如下:
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <math.h>
using namespace std;
int main()
{
int a;
int b;
cin >> a;
cin >> b;
if (a > 1000000 || a < -1000000 || b < -1000000 || b >1000000)
return -1;
int sum = a + b;
stack<int> s;
sum = abs(sum);
while (sum >= 10)
{
s.push(sum % 10);
sum /= 10;
}
s.push(sum);
if (a + b < 0)
cout << '-';
while (!s.empty()){
if (abs(a + b) == s.top())
{
cout << sum;
return 0;
}
cout << s.top();
s.pop();
if (s.size() % 3 == 0 && s.size() >= 3)
cout << ",";
}
return 0;
}
PAT题目1002:
解题思路:
本题和上题一样,看起来很简单,但实际上也是有很多东西需要注意的。
因为个人有一丢强迫症,因此在写程序的时候,会对输入做各种检查,判断其是否出入错误。
最需要注意的就是:①2个系数相加也可能为0;②对有小数点的输出的格式问题;③ 对系数为0的项的处理。
代码如下:
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
int main()
{
float exp[1001];
for (int i = 0; i< 1001; i++)
exp[i] = 0;//初始化为0了
int k_a = 0, k_b = 0, k_sum = 0;
int temp_exp = 0;
float temp_coe = 0;
cin >> k_a;
if (k_a > 10 || k_a < 1)
return 0;
for (int i = 0; i < k_a; i++)
{
cin >> temp_exp;
cin >> temp_coe;
if (temp_exp < 0 || temp_exp > 1000)
return 0;
exp[temp_exp] = temp_coe;
if (exp[temp_exp] != 0)
k_sum++;
}
cin >> k_b;
if (k_b > 10 || k_b < 1)
return 0;
for (int i = 0; i < k_b; i++)
{
cin >> temp_exp;
cin >> temp_coe;
if (temp_exp < 0 || temp_exp > 1000)
return 0;
if (exp[temp_exp] == 0)
{
exp[temp_exp] = temp_coe;
if (exp[temp_exp] != 0)
k_sum++;
}
else
{
exp[temp_exp] += temp_coe;
if (exp[temp_exp] == 0)//2个系数相加可能为0
k_sum--;
}
}
if (k_sum == 0)
{
cout << k_sum;
return 0;
}
//cout << k_sum<<' ';
cout << k_sum;
for (int i = 1000; i >= 0; i--)
{
if (exp[i] != 0){
if (k_sum >= 1){
cout << ' ' << i;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout << ' ' << setprecision(1) << exp[i];
}
else{
cout << ' ' << i;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout << ' ' << setprecision(1) << exp[i];
}
k_sum--;
}
else
continue;
}
//system(" PAUSE");
return 0;
}