HDU 1002 A+B problem

来源:互联网 发布:淘宝专业版退回基础班 编辑:程序博客网 时间:2024/05/16 10:04
#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;}


0 0
原创粉丝点击