$\Huge\bold{\text{在线蹲大佬,急!!!}}$
by justinjia @ 2021-01-01 14:32:59
不建议用
我之前一道题也是用sscanf和sprint
它的时间复杂度是 $O(n)$
你懂得
至于WA的话,我不知道
试试别的吧
用这个时间常数很大的
by lmrttx @ 2021-01-01 14:49:16
@[justinjia](/user/373226)
直接if+cout不就A了吗
by lmrttx @ 2021-01-01 14:51:46
看来只能@[Unnamed_Cube](http://www.luogu.com.cn/user/372983)了。。。
by justinjia @ 2021-01-01 17:47:21
`sprintf`,如果你不做点手脚,它是不会追加到字符串末尾的,它只会覆盖,例如:
```cpp
char a[100];
sprintf(a,"abcdefg");//"abcdefg"
sprintf(a,"123");//123defg
```
解决方法是利用它的返回值,它返回成功写入的字符数,所以加点东西:
```cpp
char a[100];
int j=0;
j+=sprintf(a+j,"abcdefg");//"abcdefg"
j+=sprintf(a+j,"123");//"abcdefg123"
```
希望对lz有帮助
by _caiji_ @ 2021-01-01 18:18:38
(话说直接特判一下第一项然后直接printf不想吗)
by _caiji_ @ 2021-01-01 18:19:57
@[caijianhong](/user/390033) 话说这样为什么还不行呢?
```cpp
//每个sprintf我都改了一下
#include"stdio.h"
#include"string.h"
int main(void){
int n,a[101];
char ans[1000]="";
scanf("%d",&n);
for(int i=0;i<=n;i++)
scanf("%d",&a[i]);
for(int i=n;i>=0;i--)
if(a[i]){
if(a[i]==1){
if(i==0)
sprintf(ans+strlen(ans),"+1");
else if(i==1)
sprintf(ans+strlen(ans),"+x");
else
sprintf(ans+strlen(ans),"+x^%d",i);
}else if(a[i]==-1){
if(i==0)
sprintf(ans+strlen(ans),"-1");
else if(i==1)
sprintf(ans+strlen(ans),"-x");
else
sprintf(ans+strlen(ans),"-x^%d",i);
}else{
if(i==0){
if(a[i]>=0)
sprintf(ans+strlen(ans),"+");
sprintf(ans+strlen(ans),"%d",a[i]);
}else if(i==1){
if(a[i]>=0)
sprintf(ans+strlen(ans),"+");
sprintf(ans+strlen(ans),"%dx",a[i]);
}else{
if(a[i]>=0)
sprintf(ans+strlen(ans),"+");
sprintf(ans+strlen(ans),"%dx^%d",a[i],i);
}
}
}
const bool flag=(ans[0]=='+');
for(int i=flag;i<strlen(ans);i++)
printf("%c",ans[i]);
return 0;
}
```
by justinjia @ 2021-01-01 20:21:39
(竟然还是全部$\colorbox{red}{\color{white}WA}$,我蒻啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
by justinjia @ 2021-01-01 20:23:27
@[justinjia](/user/373226) 不要乱用```sscanf``` ```sprintf```,在该用的地方用,不要什么都用这些函数,把事情搞得太复杂。
by Argon_Cube @ 2021-01-02 19:30:19
@[justinjia](/user/373226) 要用也用`istringstream`和`ostringstream`,或者`stringstream`。为什么要用这些远古函数呢?
by Argon_Cube @ 2021-01-02 19:36:00