[PAT解题报告] A+B for Polynomials
题目输入的是两个多项式,求的是两个多项式的和。
多项式使用非0项的系数和次数来表示的,并且是按降幂输入的。预先给出了非0项的个数(很小,不超过10)。
例如
2 1 2.4 0 3.2   表示2.4x + 3.2, 并且知道次数小于1000,输出也按同样格式输出,注意只输出非0项。
这个题类似于两个有序list的合并,因为多项式的加法无非就是合并同类项而已。
我们做题可以选择最不容易出错的方法,对于本题,因为次数不超过1000,我们用数组表示某个次数项对应的系数再方便不过了,而且数组比链表容易写,出错的可能性低。关键还是数据范围,次数才1000,如果次数达到109,尽管只有10项,我们无法用数组存放了——因为数组下标没法开那么大。
几个注意点:
(1)数组使用全局的——这样没出现的系数都自动是0了,并且全局的数组不在堆栈空间里。
(2)数组开大一点没关系……
(3)注意系数是实数,判断实数是否为0一般不用x == 0  而用fabs(x) <= eps (eps一般是1e-8, 1e-10),好在本题对精度要求并不高。
代码:
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>

using namespace std;

const double eps = 1.e-8;

double a[1024],b[1024];

int main() {
int n;
    for (scanf("%d",&n);n;--n) {
        int x;
        scanf("%d",&x);
        scanf("%lf",a + x);
    }
    for (scanf("%d",&n);n;--n) {
        int x;
        scanf("%d",&x);
        scanf("%lf",b + x);
    }
    int num = 0;
    for (int i = 1000; i >= 0; --i) {
        a[i] += b[i];
        if (fabs(a[i]) >= eps) {
            ++num;
        }
    }
    printf("%d",num);
    for (int i = 1000; i >= 0; --i) {
        if (fabs(a[i]) >= eps) {
            printf(" %d %.1lf",i,a[i]);
        }
    }
    puts("");
    return 0;
}    



原题链接: http://www.patest.cn/contests/pat-a-practise/1002

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-16 02:48
门头沟学院_2022
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-16 14:39
门头沟学院_2024
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议