c-使用printf()函数而不是cout时出现问题



我试图从kickstart开始解决破纪录的一天问题。

我有两个问题:

  1. 为什么printf函数不工作,但cout完成了工作(这意味着逻辑没有问题(
  2. 代码未通过强制起动中给出的测试用例1的原因
#include <bits/stdc++.h>
using namespace std;
long long solve(){
long long n;
cin >>n;
long long a[n];
for(long long j=0;j<n;j++)
cin>>a[j];
long long k=0,ans=0;
for(long long j=0;j<n-1;j++){
if(a[j]>k){
k=a[j];
if(a[j]>a[j+1]){
ans++;
}
}
}
if(a[n-1]>k)
ans++;
return ans;
}
int main(){
long long t;
cin >> t;
for(long long i=1;i<=t;i++){
printf("Case #%d: %dn",i,solve());//instead of printf() this works: cout<<"Case #"<<i<<": "<<solve()<<endl;
}
return 0;
}

启动后的样本测试用例:

4
8
1 2 0 7 2 0 2 0
6
4 8 15 16 23 42
9
3 1 4 1 5 9 2 6 5
6
9 9 9 9 9 9

打印输出((:

Case #1: 0
Case #2: 0
Case #3: 0
Case #4: 0

预期输出(我用cout得到的输出(:

Case #1: 2
Case #2: 1
Case #3: 3
Case #4: 0

printf格式代码%d需要int而不是long long

int的最大值为2147483647,对于您的使用来说可能足够大。


cout工作的原因是std::ostream::operator<<过载以理解long long值。

您对printf使用了错误的格式说明符。

%d格式说明符需要int,但您传入的是long long。使用错误的格式说明符会触发未定义的行为。

要打印long long,您需要使用%lld

cout上使用<<运算符会重载各种参数类型,因此它可以根据所选的重载来知道类型。

最新更新