当我给变量赋予更高的值时,为什么我的程序(代码厨师 - 两个数字)会崩溃

时间:2017-07-01 04:53:41

标签: c++ algorithm

问题:https://www.codechef.com/problems/TWONMS。 我的代码:

 #include<iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
int main(){
int t,a,b,n,c,d,FinalNumber;
cin>>t;
for(int i= 0;i<t;i++){
cin>>a;
cin>>b;
cin>>n;
c=a;
d=b;
int n1 = n/2;
int n2 = n - n1;
while(n1 != 0){
c=c*2;
n1--;
}
while(n2 != 0){
d=d*2;
n2--;
}
if(c>d){
FinalNumber = c/d;
cout<<FinalNumber<<endl;
}
else{
FinalNumber = d/c;
cout<<FinalNumber<<endl
}
}
}

当我输入N值大于30时,此程序崩溃,我该怎么做才能让它处理更大的数字?还有我的程序是否正确?

2 个答案:

答案 0 :(得分:0)

根据您的代码,最初分配n1的{​​{1}}用作n/2 c上加倍操作的计数器。

取决于c=c*2;c的值。和d,肯定会发生溢出,可能会导致一系列问题。

请注意,这些编码练习并不是学习如何编程的好方法。虽然它们可能会刺激您提高技能,但它们通常会鼓励用户编写糟糕的代码质量。

答案 1 :(得分:0)

在您的代码中,cd进入整数溢出:您的数字太大而不适合32位整数。

像codechef这样的网站希望你进一步思考:应用强力算法只能处理小输入,你必须找到一种更好的方法来解决给定约束的问题。