A4.多项式输出 AC题解
2025-08-14 19:26:32
发布于:浙江
3阅读
0回复
0点赞
**🔍 代码结构分析
从输入中读取一个表示多项式的次数。
然后从输入中读取 n + 1 个整数,分别表示从最高次项到常数项的系数。
在 while(cnt >= 0) 循环中,逐个处理每个系数:
cnt 从 n 到 0,共 n + 1 次循环。
在每次循环中:
读取一个系数 x。
如果 x != 0,则输出该项的字符串表示。
包含若干判断语句(如是否输出 +、-、系数是否为 为 1 等)。
输出语句(如 cout<<)涉及字符串拼接和格式化。
🧮 时间复杂度计算
循环次数:最多执行 n + 1 次(对应多项式的所有项)。
每次循环中的操作:
条件判断语句(如 if(x != 0)、if(cnt != n) 等):常数时间 O(1)。
输出操作(如 cout << ...):
输出字符串和整数是线性于输出字符数量的操作。
最坏情况下,每项输出长度最多为 O(log|x| + log(cnt))(即系数和指数的位数)。
总体输出字符数量为 O(n log M),其中 M 是系数的最大绝对值(≤100)。
因此,整个程序的时间复杂度是:
O
(
n
)
O(n)
说明:虽然输出的字符数量是 O(n log M),但由于 M 是常数(≤100),log M 也是常数,因此可以忽略不计,整体时间复杂度仍为 O(n)。
📌 额外说明
输入输出操作的时间复杂度在算法分析中通常不计入,因为它们依赖于输入规模和输出内容。
本题中,主要工作是处理 n + 1 个系数,所以时间复杂度由循环主导。**
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,x;cin>>n;
int cnt=n;
while(cnt>=0){
cin>>x;
if(x!=0){
if(cnt!=n) if(x>0) cout<<"+";
if(x<0) cout<<"-";
if(abs(x)!=1||cnt==0) cout<<abs(x);
if(cnt>0) cout<<"x";
if(cnt>1) cout<<"^"<<cnt;
}
cnt--;
}
return 0;
}
这里空空如也
有帮助,赞一个