首页 > 其他分享 >【NC16622】多项式输出

【NC16622】多项式输出

时间:2024-03-28 11:30:46浏览次数:29  
标签:输出 coef int 多项式 char sprintf res strlen NC16622

题目

多项式输出

模拟,注意细节

思路

一道模拟题,按要求模拟即可,没有算法上的难度,有的是动手的复杂性。这本来可以直接在主函数中写处理过程的,但是为了其更有通用性,在这里将其提取为一个函数,具体见代码。

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * @brief 根据系数数组和最高次幂生成降幂排列的多项式
 *
 * @param coef 系数数组,长度为 n + 1
 * @param n 多项式的最高次幂
 * @param var 变量使用的字符,比如 x
 * @return char* 堆中的字符串,由调用者释放
 */
char* gen(int* coef, int n, char var) {
    // 如果字符串长度可能很长,则将这里的N修改即可
    const int N = 1000;
    char* res = (char*)malloc(N * sizeof(char));
    int t = 0;
    for (int i = n; i >= 0; i--) {
        t = coef[n - i];
        // 系数为0,直接跳过
        if (!t) continue;
        if (i < n) {
        	// 如果不是第一项,则系数前面要带符号
            sprintf(res + strlen(res), "%c", t > 0 ? '+' : '-');
        } else {
        	// 如果是第一项,则只有负数才有符号
            if (t < 0) sprintf(res + strlen(res), "-");
        }
        // 接下来是输出系数
        if (t > 1 || t < -1) {
        	// 如果是变量项且系数绝对值为 1 的话,就不用输出
        	// 只用输出绝对值大于 1 的
            sprintf(res + strlen(res), "%d", t > 0 ? t : -t);
        } else {
        	// 如果是最后一项,即常数项,则无论绝对值是多少都要输出
            if (!i) sprintf(res + strlen(res), "%d", t > 0 ? t : -t);
        }
        if (i > 0) {
        	// 如果是变量项
            if (i != 1) {
            	// 则只有指数不为 1 才输出指数
                sprintf(res + strlen(res), "%c^%d", var, i);
            } else {
            	// 否则不用输出指数
                sprintf(res + strlen(res), "%c", var);
            }
        }
    }
    // 这里是将多余的空间截断,让字符串恰好占用其长度以及一个\0的空间
    n = strlen(res);
    realloc(res, n + 1);
    res[n] = 0;
    return res;
}

int main(void) {
    int n = 0, t = 0;
    scanf("%d", &n);
    int coef[n + 1];
    for (int i = 0; i <= n; i++) {
        scanf("%d", coef + i);
    }
    char* ans = gen(coef, n, 'x');
    printf("%s\n", ans);
    free(ans);
    return 0;
}

标签:输出,coef,int,多项式,char,sprintf,res,strlen,NC16622
From: https://blog.csdn.net/m0_52319522/article/details/137050922

相关文章

  • c语言:从键盘输入任意年月,输出该年月的天数(用switch语句完成)
    1.switch语句(1)switch是c语言的关键字,switch()后面使用花括号括起来的部分称为switch语句体。(2)紧跟在switch后一对圆括号中的表达式可以是整形表达式,以及后面的将要学习的字符型表达式等。表达式两边的一对括号不能省略。switch()(3)case也是关键字,与其后面的常量表达式合称cas......
  • 输出学生成绩
    题目描述本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。输入格式输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。输出格式按输出格式输出,行末有换行......
  • Python学习——访问命令行参数、标准输入输出
    一、sys模块    通过sys.argv()函数访问命令行参数,sys.argv()生成的是一个列表,argv[0]访问脚本,argv[1]访问第一个参数,argv[2]访问第二个参数。例1、通过调用命令行参数n,生成n个随机数。#访问命令行importsys,randomn=int(sys.argv[1])#调用命令行第一个参数,即n......
  • linux 中实现数据按照指定行号顺序输出
     001、测试数据[root@pc1test01]#lsa.txtidx.txt[root@pc1test01]#cata.txt##测试数据01020304050610708091011122131415161718319202122232442526272829305313233343536637383940414274344454647......
  • C语言经典例题(7) --- 计算三角形的周长和面积、球体的体积、变种水仙花数、时间转换
    文章目录1.计算三角形的周长和面积2.计算球体的体积3.变种水仙花数4.时间转换5.输出学生信息1.计算三角形的周长和面积题目描述:根据给出的三角形3条边a,b,c(0<a,b,c<100,000),计算三角形的周长和面积。输入描述:一行,三角形3条边(能构成三角形),中间用一个空......
  • NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)
    namespaceNPOI{///<summary>///表示单元格的维度,通常用于表达合并单元格的维度///</summary>publicstructDimension{///<summary>///含有数据的单元格(通常表示合并单元格的第一个跨度行第一个跨度列),该字段可能为null......
  • 【ArkTS】鸿蒙开发 比较两个数的大小 用户界面输入两个数并输出较大数
    在DevEcoStudio中开发一个比较两个数X,Y大小的界面,主要练习对HarmonyOS文本框输入TextInput属性的应用。TextInput的具体使用步骤可以先在官网略作了解 1.设置三个值来分别接收输入的两个值和作比较后较大的值@StateXvalue:string=''@StateYvalue:string=''......
  • C语言例4-1:计算半径为1.5的圆的周长和面积并输出
    代码如下://计算半径为1.5的圆的周长和面积并输出#include<stdio.h>#definePI3.1415926intmain(void){ floatradius,length,area; radius=1.5; length=2*PI*radius;//计算圆的周长 area=PI*radius*radius;//计算圆的面积 printf("radiu......
  • 「Linux系列」Shell 输入/输出重定向
    文章目录一、Shell输入重定向二、Shell输出重定向标准输出重定向:标准错误输出重定向:同时重定向标准输出和错误输出:禁用输出:三、Shell重定向命令输出重定向:错误输出重定向:标准输出和错误输出同时重定向:输入重定向:其他重定向用法:文件描述符的重定向:四、相关链接一......
  • 关于RDK X3(旭日X3派)的VPS不能输出300x300照片的临时解决办法参考
    探索工具使用JupyterNotebook逐句运行Python代码,并且可以通过matplotlib模块将nv12格式的图像直接在开发机的浏览器上显示。**如何为RDKX3安装JupyterNotebook:**https://developer.horizon.cc/forumDetail/188481611833243692**如何使用matplotlib将nv12的图像显示出......