[英]why the given code doesn't work for all test cases?Why it doesn't work when input is 7786?
#include <iostream>
#include<math.h>
using namespace std;
int main() {
//code
int t,n,s;
cin>>t;//no. of test cases
for(int k=1;k<=t;k++)
{ cin>>n;s=0;//n:input,s:sum
for(int i=1;i<=n*2;i++)
{
if(i%2==0)
s=s+(i*i);
}
cout<<s<<endl;
}
return 0;
}
原始問題:
戰俘的力量 | 偶數
給定單個 integer N,您的任務是求出前 N 個偶數自然數的平方和。
例子:
輸入:3
Output: 56
2 2 + 4 2 + 6 2 = 56
輸入:8
Output: 816
2 2 + 4 2 + 6 2 + 8 2 + 10 2 + 12 2 + 14 2 + 16 2
輸入:
輸入的第一行包含一個 integer T,表示測試用例的數量。 然后是 T 測試用例。 每個測試用例的唯一行包含一個 integer N。
Output:
對於每個測試用例 output,新行中所需的答案。 約束:
1<=T<=100
N<=104
示例: 輸入:
3
2
5
9
Output:
20
220
1140
**ERROR:**
Wrong Answer. !!!Wrong Answer
可能您的代碼對於多個測試用例 (TC) 無法正常工作。
您的代碼失敗的第一個測試用例:
輸入:
7786
其正確的 output 是:
629456320324
您的代碼 output 是:
-1903872188
您的s
數據類型不夠大。 您可以指定您想要一個 64 位 int(應該足夠大):
#include <iostream>
int main()
{
int n = 7786;
uint64_t s = 0; // note the type
for(int i = 1; i <= n*2; ++i)
{
if(i%2 == 0)
s += i*i;
}
std::cout << s << std::endl; // prints 629456320324
}
這是一個演示。
對總和使用更大的無符號 integer 類型(使用有符號 integer 類型沒有意義),只需編寫一個單獨的 function 來計算總和。
這是一個演示程序,展示了如何編寫 function。
#include <iostream>
unsigned long long even_square_sum( unsigned int n )
{
unsigned long long sum = 0;
for ( unsigned int i = 0; i < n; i++ )
{
unsigned long long int even = 2 * ( i + 1 );
sum += even * even;
}
return sum;
}
int main()
{
unsigned int n = 2;
std::cout << n << ": " << even_square_sum( n ) << '\n';
n = 5;
std::cout << n << ": " << even_square_sum( n ) << '\n';
n = 9;
std::cout << n << ": " << even_square_sum( n ) << '\n';
n = 7786;
std::cout << n << ": " << even_square_sum( n ) << '\n';
return 0;
}
程序 output 是
2: 20
5: 220
9: 1140
7786: 629456320324
請注意,使用具有以下條件的循環也是沒有意義的
for(int i=1;i<=n*2;i++)
^^^^^^
因為循環有很多冗余迭代。
int
類型沒有足夠的范圍,使用long int
或有時你需要long long int
。
#include <iostream>
#include<math.h>
using namespace std;
int main() {
//code
long int t,n,s;//Using long int removed the error
cin>>t;//no. of test cases
for(int k=1;k<=t;k++)
{ cin>>n;s=0;
for(int i=1;i<=n*2;i++)
{
if(i%2!=0)
s=s+(i*i);
}
cout<<s<<endl;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.