HDU1002

<pre name="code" class="cpp">#include<iostream>
using namespace std;
int main()
{
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		string str1,str2;
		
		cin>>str1>>str2;//将数字以字符串的形式输入 
		string s1=str1,s2=str2;//记录原字符串 
		int len1=str1.size(),len2=str2.size();//取得字符串的长度 

		if(len1<=len2) //确保len1是较大数,len2较小 。str1是较长的字符串,str2是较短的字符串 
		{
			string ss;
			ss=str1;
			str1=str2;
			str2=ss;
			int le=0;
			le=len1;
			len1=len2;
			len2=le;
		}
		
		int num1[len1],num2[len2];
		int sum[len1+1];
		
		for(int j=0;j<len1;j++)//将 str1,str2存入int num1,num2 数组内 
		{
			num1[j]=str1[j]-'0';
		}
		for(int j=0;j<len2;j++)
		{
			num2[j]=str2[j]-'0';
		}
		
		int carry=0,len=len1-1;
		
		for(int j=len2-1;len>=0;j--,len--)//从str2(较短)的最后一位开始相加,直到遍历完str1(较长) 
		{
			if(j>=0) //str2还没遍历完的时候 
			{
				sum[len]=(num1[len]+num2[j]+carry)%10;
				carry=(num1[len]+num2[j]+carry)/10;
			}
			else //str2已经遍历结束 
			{
				sum[len]=(num1[len]+carry)%10;
				carry=(num1[len]+carry)/10;
			}
		}
		cout<<"Case "<<i<<":"<<endl;
		cout<<s1<<" + "<<s2<<" = ";
		if(carry!=0) 
		{
			cout<<carry;	                            
		}
		for(int j=0;j<len1;j++)
		{
			cout<<sum[j];
		}
		if(i==t)cout<<endl;
		else cout<<endl<<endl;
	}
	
	return 0;
}


 
 

这是一道大数加法,由于long long 无法存储下数字,所以改用string存储。


你可能感兴趣的:(HDU1002)