#include <iostream>
using namespace std;
#define NSIZ 12
char num1[NSIZ];
char num2[NSIZ];
//题意:水题,求2个数最后的k位是否相同,若相同则输出-1,不同则为两者之和,写了2个版本,一个大数版的,一个普通版的
//例子1:10001 1 3 则输出-1
//例子2:11 21 3 则输出32
//下面的例子是大数版的
int cmp(char num1[], char num2[], int k)
{
int i, j, len1 = strlen(num1), len2 = strlen(num2);
int flag = 1;
for(i = len1 - 1, j = len2 -1;i >= 0 && j >= 0 && k > 0; --i,--j, --k)
{
if(num1[i] != num2[j])
{
return 0;
}
}
if(k > 0)
{
while(k > 0 && j >= 0)
{
if(num2[j] != '0')
{
return 0;
}
--k;
--j;
}
while(k > 0 && i >= 0)
{
if(num1[i] != '0')
{
return 0;
}
--k;
--i;
}
}
return 1;
}
void add(char num1[], char num2[])
{
int len1 = strlen(num1);
int len2 = strlen(num2);
char num3[NSIZ];
int i, tmp;
int k , j;
if(len1 < len2)
{
strcpy(num3, num1);
strcpy(num1, num2);
strcpy(num2, num3);
len1 = strlen(num1);
len2 = strlen(num2);
}
tmp = 0;
k = 0;
memset(num3, 0, sizeof(num3));
for(i = len1 -1, j = len2 - 1 ;i >= 0 && j >= 0;--i, --j)
{
tmp = num1[i] - '0' + num2[j] - '0' + tmp;
num3[k++] = tmp % 10 + '0';
tmp /= 10;
}
while(i >= 0)
{
tmp = num1[i] - '0' + tmp;
num3[k++] = tmp % 10 + '0';
tmp /= 10;
--i;
}
if(tmp != 0)
{
num3[k++] = tmp + '0';
}
for(i = 0; i < k; ++i)
{
num1[i] = num3[k - i - 1];
}
num1[i] = 0;
}
int main()
{
int i, j, len1, len2, k;
while(scanf("%s %s %d", num1, num2, &k) != EOF)
{
if(!strcmp(num1, "0") && !strcmp(num2, "0"))
{
break;
}
if(cmp(num1, num2, k) == 0)
{
add(num1, num2);
printf("%s\n", num1);
}
else
{
printf("-1\n");
}
}
return 0;
}
//下面的例子是普通版的
#include <iostream>
using namespace std;
int main()
{
int a,b,aa, bb, k;
int i, flag;
while(scanf("%d%d%d",&a,&b,&k)!=EOF && (a+b))
{
flag=1;
aa=a,bb=b;
for(i=1;i<=k;i++)
{
if(a%10==b%10)
{
a/=10,b/=10;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("-1\n");
}
else
{
printf("%d\n",aa + bb);
}
}
return 0;
}