1. 程式人生 > >杭電1002解答疑問求解(附對和錯的C++程式碼)

杭電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
兩張都執行正確,而且我執行時結果也都沒見錯誤。