-
题目大意:给出两个数字A、B,每个数字都由K个非0的数组成(该数最大为1000位)。要求计算A + B,即将A、B每一位的数字对应相加,最后输出相加后的多位数(最后结果保留1位小数)。
-
思路:
-
用数组存数字,用变量index记录位数,将数字存入数组相应位置。
因为最后要统计相加后的数里有几个非零数,所以可将结果存在一个数组里。
-
用cnt存数字里的非零数(而不是数字的最大位!仔细读题!)
-
-
知识点:
- vector
-
代码:
#include <iostream> #include <vector> using namespace std; int main(){ vector<float> v(1000); // 注意:数字最大位为1000 int cnt = 0; // 输入数字A、B for(int i = 0; i < 2; i++){ int k; scanf("%d", &k); // 将数字存入数组num for(int j = 0; j < k; j++){ int index; float a; scanf("%d %f", &index, &a); // index从0开始 v[index] += a; } } for(int i = 0; i < 1001; i++){ // 数字最大位为1000 if(v[i] != 0) cnt++; } // 不能用这种方式输出结果,因为如果cnt为0,只要输出个0,后面不接空格 // printf("%d ", cnt); // for(int i = 1000; i >= 0; i--){ // if(v[i] != 0.0){ // 注意:数组里的数都是浮点数 // printf("%d %.1f", i, v[i]); // if(i != 0) // printf(" "); // } // } printf("%d", cnt); // 若cnt为0时,后面也不能有空格 for(int i = 1000; i >= 0; i--){ if(v[i] != 0.0){ // 注意:数组里的数都是浮点数 printf(" %d %.1f", i, v[i]); } } return 0; }
-
总结:
-
细节:
- 若我想生成二维vector,在往二维vector里插入新vector时,要注意新vector的类型要和二维vector定义的一致;
- 读题错误:n的最大值时1000,不是10。
-
易错:没有考虑cnt为0的情况,这种情况下只要输出个0,后面不接空格。
-
【PAT】1002 A+B for Polynomials (25 分)
最新推荐文章于 2024-01-28 22:42:58 发布
这篇博客讨论了一个编程问题,即如何处理包含最多1000位的两位非零数字的相加,并计算结果中非零数字的个数。作者通过使用vector存储数字并遍历计算,强调了读题细节和处理特殊情况(如非零数字个数为0)的重要性。
摘要由CSDN通过智能技术生成