HDU 1002 A+B problem

#include"stdio.h"
#include"string.h"
int main()
{
	int T,a=1,i,j,len1,len2,a1[1001],a2[1001],a3[1001],flag=0;
	char s1[1001],s2[1001];
	scanf("%d",&T);
	while(T--)
	{		       
		scanf("%s %s",s1,s2);
		len1=strlen(s1);
		len2=strlen(s2);
		memset(a1,0,1001*sizeof(int));
		memset(a2,0,1001*sizeof(int));
        memset(a3,0,1001*sizeof(int));
        for(i=len1-1,j=0;i>=0;i--,j++)
			a1[j]=s1[i]-'0';
        for(i=len2-1,j=0;i>=0;i--,j++)
			a2[j]=s2[i]-'0';
		//add(a1,a2,a3,len1,len2);
		int len=(len1>=len2)?len1:len2;
		for ( i=0;i<len;i++)
		{
			a3[i]+=a1[i]+a2[i];
			a3[i+1]=a3[i]/10;
			a3[i]%=10;
		} 
		//put(s1,s2,a3,a,i);
		printf("Case %d:\n",a);
		printf("%s + %s = ",s1,s2);
		if(a3[len])  flag=1;
		if(flag)
		{
			for (i=len;i>=0;i--)
			{
				printf("%d",a3[i]);
			}
		}
		else
		{
			for (i=len-1;i>=0;i--)
			{
				printf("%d",a3[i]);
			}
		}
		if(T!=0) printf("\n");
        printf("\n");
		a++;
	}
	return 0;
}

 一开始是用倒着加 ,但是很麻烦要考虑很多特殊情况,比如001+1  等此类情况。

所以我用这种方法了 挺方便的


#include <iostream>
//#include <stdio.h>
#include <cstring>
using namespace std;

void caulate_x(int ss1[],int ss2[],int sum[])
{
    for (int i=0;i<1000;i++)
    {
		sum[i] += ss1[i]+ss2[i];
		sum[i+1] += sum[i]/10;
		sum[i] %=10;
    }
}

void fun(char s[],int ss[],int len)
{
	int j=0;
    for (int i=len-1;i>=0;i--)
    {
        ss[j++] = s[i]-'0';
    }
}
int main()
{
	int n,i,k;
	cin>>n;
	char s1[1001],s2[1001];
	int ss1[1001],ss2[1001];
	int sum[1001];
	for (i=1;i<=n;i++)
	{
       cin>>s1>>s2;
	   memset(ss1,0,sizeof(ss1));
       memset(ss2,0,sizeof(ss2));
	   memset(sum,0,sizeof(sum));
	   fun(s1,ss1,strlen(s1));
       fun(s2,ss2,strlen(s2));
       caulate_x(ss1,ss2,sum);

	   cout<<"Case "<<i<<":"<<endl;
	   printf("%s + %s = ",s1,s2);
	   k=1000;
	   while (!sum[k])
	       k--;
	   cout<<sum[k--];
	   for (;k>=0;k--)
	   {
		   printf("%d",sum[k]);
	   }
	   if(i!=n)
	      cout<<endl<<endl;
	   else
		   cout<<endl;
	}
	return 0;
}


你可能感兴趣的:(HDU 1002 A+B problem)