直接用__int64就可以。
不过我比较蠢,中间用了两次字符串把0挑出来。
#include<stdio.h>
#include<string.h>
char num1[111],num2[111],s[111];
char cnum1[111],cnum2[111],cs[111];
__int64 a,b,c,d;
int main()
{
while(~scanf("%s%s",num1,num2))
{
// memset(num1,0,sizeof(num1));
// memset(num2,0,sizeof(num2));
memset(cnum1,0,sizeof(cnum1));
memset(cnum2,0,sizeof(cnum2));
memset(s,0,sizeof(s));
memset(cs,0,sizeof(cs));
int i,j;
a=b=c=d=0;
int l1=strlen(num1);
int l2=strlen(num2);
for(i=0,j=0;i<l1;i++)
{
a+=(num1[i]-'0');
if(i!=l1-1)
a*=10;
if(num1[i]!='0')
{
cnum1[j]=num1[i];
j++;
}
}
for(i=0,j=0;i<l2;i++)
{
b+=(num2[i]-'0');
if(i!=l2-1)
b*=10;
if(num2[i]!='0')
{
cnum2[j]=num2[i];
j++;
}
}
__int64 sum=a+b;
int k=0;
while(sum)
{
if(sum%10!=0)
s[k++]=(sum%10+'0');
sum/=10;
}
int l3=strlen(cnum1);
int l4=strlen(cnum2);
for(i=0,j=0;i<l3;i++)
{
c+=(cnum1[i]-'0');
if(i!=l3-1)
c*=10;
}
for(i=0,j=0;i<l4;i++)
{
d+=(cnum2[i]-'0');
if(i!=l4-1)
d*=10;
}
__int64 sum1=c+d;
k=0;
while(sum1)
{
cs[k++]=(sum1%10+'0');
sum1/=10;
}
if(strcmp(s,cs)==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}