• 7-2 一元多项式的乘法与加法运算(20 分)


    设计函数分别求两个一元多项式的乘积与和。

    输入格式:

    输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

    输出格式:

    输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

    题意理解

    算法思路:1、由上图可看出本题中多项式加法是将指数相同的系数相加,多项式乘法是各项的系数相乘指数相加

                      2、一开始想的是模仿浙江大学慕课何老师用链表写的,但是看了一下不仅思想比较复杂,代码量也蛮大

                          有兴趣可以通过此链接看看http://www.icourse163.org/learn/ZJU-93001?tid=1001757011

                     3、下面是用数组实现的,其关键思想是将指数为 z 的系数 x 放在数组的z位置上

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define N 10000
     5 
     6 /*输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数
     7 (绝对值均为不超过1000的整数)。数字间以空格分隔。
     8 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。
     9 数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。*/
    10 int main()
    11 {
    12     int a[N] = {0};
    13     int b[N] = {0};
    14     int c[N] = {0};  //求积
    15     int d[N] = {0};  //求和
    16     int i ,j;
    17     int x,z ; //系数  指数
    18     int cnt=0;
    19 
    20     scanf("%d",&i);  //读入第一个单项式
    21     while( i-- ){
    22         scanf("%d %d",&x,&z);
    23         a[z] += x;   //指数为z的系数放在z位置上
    24     }
    25 
    26     scanf("%d",&i);  //读入第二个单项式
    27     while( i-- ){
    28         scanf("%d %d",&x,&z);
    29         b[z] += x;
    30     }
    31 
    32     //多项式乘法
    33     for( i=N-1; i>=0; i--){
    34 
    35         if( a[i] ){
    36             for( j=0; j<N; j++){
    37                 if( b[j]){
    38                     c[ i+j ] += a[i]*b[j];
    39                 }
    40             }
    41         }
    42     }
    43 
    44     //输出多项式乘法结果
    45     for( i=N-1; i>=0; i--){
    46 
    47         if( c[i] ){
    48             if( cnt ){
    49                 //处理结尾不能有多余空格
    50                 printf(" ");
    51             }
    52             printf("%d %d",c[i],i);
    53             cnt++;
    54         }
    55     }
    56     if( !cnt ){
    57         printf("0 0");
    58     }
    59     printf("
    ");
    60 
    61     //多项式加法
    62     for( i=N-1; i>=0; i--){
    63         if( a[i]){
    64             d[i] += a[i];
    65         }
    66     }
    67     for( j=N-1; j>=0; j--){
    68         if( b[j]){
    69             d[j] += b[j];
    70         }
    71     }
    72 
    73     //输出多项式加法结果
    74     cnt = 0;
    75     for( i=N-1; i>=0; i--){
    76         if( d[i] ){
    77             if( cnt ){
    78                 printf(" ");
    79             }
    80             printf("%d %d",d[i],i);
    81             cnt++;
    82         }
    83     }
    84     if(!cnt){
    85         printf("0 0");
    86     }
    87 
    88     return 0;
    89 }





    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    经典假设检验理论记录一二
    阿里云centos7.3安装tomcat8
    PowerDesigner中Name与Code同步的问题
    PowerDesigner中NAME和COMMENT的互相转换
    树形结构的数据库表设计
    Spring mybatis Access denied for user 'root'@'localhost' (using password:YES)
    IOS上架审核问题
    maven自动部署war包到tomcat 问题
    SpringMVC +Hibernate JPA+Spring-data-jpa
    Hibernate4.3.x Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8326018.html
Copyright © 2020-2023  润新知