杭电1002解答疑问求解(附对和错的C++代码)

这里是ACM机器编译不通过的代码,求指教为何错误了??VC++6.0运行成功
<pre class="cpp" name="code">#include <iostream>
#include<string>
using namespace std;
int main()
{
	
	int t,s[1002]={0};
	string a,b;
	int L1,L2,LS,LS1=0,n,m,k;
	/*
	*t储存实例的样例数1-20
	*s[1002]储存数组
	*a,b分别储存输入的数字
	*L1储存A数字的长度最后一个元素的下标
	*L2储存B数字的长度最后一个元素的下标
	*LS储存结果数字的最后一个元素的下标
        *LS1储存结果长度,如果进位的话,除了第一位没包括
	*n,m是分别对应位数的数字用于相加
	*k储存数字结果
	*/
	
	cin>>t;
	bool flag=false;//判断是否进位
	for(int i=1;i<=t;i++)
	{
        cin>>a>>b;

		L1 = a.length()-1;
		L2 = b.length()-1;
		if(L1 == L2)
		{
		   if((a[0]+b[0]-'0'-'0') >= 10)
		   {
			LS = (L1>L2)?L1:L2;
			LS++;
		   }
		   else
		   {
			LS = (L1>L2)?L1:L2;
		   }
		}
		else if(L1 > L2)
		{
			LS = L1;
		}
		else
		{
             LS = L2;
		}


		while(L1 >= 0 && L2 >=0)
		{
			n=a[L1]-'0';
			m=b[L2]-'0';
			if((n+m) >= 10)
                flag=true;
			else
				flag=false;

			  if(flag)
			  {
				k=(n+m)-10;
				s[LS]+=k;			
                s[--LS]=1;
				LS1++;
				if((L1==L2) && L1==0)LS1++;
				L1--;
			    L2--;
			  }
			  else
			  {
				k=(n+m);
				s[LS]+=k;
                 if(s[LS] == 10)
				 {
				   s[LS]=0;
				   s[--LS]=1;
				 }
			     else
				 {
				   s[--LS]=0;
				 }
				L1--;
			    L2--;
				LS1++;
			  }
		}
			int temp=0;
			if(L1 < 0)
			{
                while(L2 >= 0)
				{
					s[LS]+=b[L2]-'0';
                    if(s[LS] >=10)
					{
						if(LS == 0)
						{
							temp=1;
							s[LS]=0;
						}
						else
						{
							temp=0;
							s[LS] = 0;
							s[--LS] = 1;
							LS++;
						}
					}
					LS--;
					L2--;
					LS1++;
				}
			}
				if(L2 < 0)
			{
                while(L1 >= 0)
				{
					s[LS]+=a[L1]-'0';
					if(s[LS] >=10)
					{
						if(LS == 0)
						{
							temp=1;
							s[LS]=0;
						}
						else
						{
							temp=0;
							s[LS] = 0;
							s[--LS] = 1;
							LS++;
						}
					}
					LS1++;
					LS--;
					L1--;

				}
			}
		
		
		cout<<"Case "<<i<<":"<<endl;
		cout<<a<<" + "<<b<<" = ";
		if(temp==1)
		{
			cout<<temp;
		}
		for(int e=0;e<LS1;e++)
		{
			cout<<s[e];
			s[e]=0;
		}
		cout<<"\n";
		if(i == t){}
		else cout<<"\n";
		LS1=0;
	}
	
	return 0;
}

 
 



这里是编译通过的代码

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string a,b;
	int num,sum[1000];
    cin>>num;
	for(int l=0;l<num;l++)
	{
		cin>>a>>b;
		int m=0,n=0,temp=0,i,k;
		int	q=0;//用于记录sum数组的长度!!
	    i=a.length();
	    k=b.length();
		i=i-1;
		k=k-1;
		while(i>=0 && k>=0)
		{
			m=a[i]-'0';
			n=b[k]-'0';
			sum[q++]=(temp+m+n)%10;
			temp=(temp+m+n)/10;
			i--;
			k--;
		}
	  if(i>k)
	  {
		  while(i>=0)
		  {
		     
			 m=a[i]-'0';
			 sum[q++]=(temp+m)%10;
		     temp=(temp+m)/10;

			 i--;
		  }
	  }
	  if(k>i)
	  {
		 while(k>=0)
		  {
		     m=b[k]-'0';
			 sum[q++]=(temp+m)%10;
		     temp=(temp+m)/10;
			 k--;
		  }
	  }
	  sum[q]=temp;
	  cout<<"Case "<<l+1<<":"<<endl;
	 cout<<a<<" + "<<b<<" = ";
	  if(sum[q]!=0) cout<<sum[q];
		  for(--q;q>=0;q--)
          cout<<sum[q];
	 cout<<endl;
	 if(l<num-1) cout<<endl;
	}
 return 0;
}
</pre><pre class="cpp" name="code" snippet_file_name="blog_20141120_5_1564528" code_snippet_id="525913">
求告诉第一个代码为何不能AC
而第二个代码可以AC
两张都运行正确,而且我运行时结果也都没见错误。



你可能感兴趣的:(杭电1002解答疑问求解(附对和错的C++代码))