codervivi

题目

This time, you are supposed to find A+B where A and B are two polynomials.

Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N​1​​ a​N​1​​ ​​ N​2​​ a​N​2​​ ​​ ... N​K​​ a​N​K​​ ​​
where K is the number of nonzero terms in the polynomial, N​i​​ and a​N​i​​ ​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤N
​K​​ <⋯<N​2​​ <N​1​​ ≤1000.

Output Specification:
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2

题目解读

给出两个多项式,每个输入格式是 非零项个数 指数1 系数1 指数2 系数2
让计算两多项式的和,并按照指定格式输出 非零项个数 指数1 系数1 指数2 系数2
要求顺序是指数从高到低

思路解析

  • 可以用一个结构体来保存每一项的指数和系数,然后在第二次输入时根据去找到相应的那一项,对其系数进行修改。
  • 这样做既浪费存储空间也浪费时间,但一般都能想到,更好的做法是,用一个数组来取代整个结构体,每一项的指数作为数组的索引系数作为值,这样在读入时,直接找到对应位置进行修改,对数组的访问是很快的。
  • 之后一次遍历,统计出数组不为0的个数,就是非零项的个数;然后对数组从后往前输出每个非零项对应的下标和值,就是结果。

代码

#include <iostream>
using namespace std;
int main() {
  int a, b;
  cin >> a >> b;
  // 两数和转为字符串
  string s = to_string(a + b);
  // 得到有效长度
  int len = s.length();
  for (int i = 0; i < len; i++) {
    // 输出当前位
    cout << s[i];
    if (s[i] == '-')
      continue;
    // 标准化格式 -xx,123,999
    if ((i + 1) % 3 == len % 3 && i != len - 1)
      cout << ",";
  }
  return 0;
}

相关文章:

  • 2021-08-10
  • 2021-08-21
  • 2021-06-02
  • 2021-09-21
  • 2018-03-18
  • 2021-09-16
  • 2020-05-18
  • 2021-11-11
猜你喜欢
  • 2021-10-05
  • 2021-10-28
  • 2021-08-27
  • 2021-11-16
  • 2021-04-23
  • 2021-07-23
  • 2019-03-29
相关资源
相似解决方案