很坑的题目,测试例子要求如果B的长度小于A,则在B前边填上0补齐,题目中并没有说。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAX 100+10
void zero(char a[], int d)
{
for (int i = strlen(a)-1; i >=0; i--)
a[i+d] = a[i];
for (int i = 0; i < d; i++)
a[i] = '0';
return;
}
char A[MAX], B[MAX], C[MAX];
int main()
{
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
cin >> A >> B;
int f = 1, i = 0, j = 0;
if (strlen(B) < strlen(A))
zero(B, strlen(A)-strlen(B));
for (i = strlen(A)-1, j = strlen(B)-1; i >= 0 && j >= 0; i--, j--)
{
if (1 == f)//奇数位
{
int sum = 0;
sum = (A[i]-'0' + B[j]-'0') % 13;
if (sum < 10)
C[j] = (char)(sum+'0');
else
{
switch(sum)
{
case 10:
C[j] = 'J';
break;
case 11:
C[j] = 'Q';
break;
case 12:
C[j] = 'K';
break;
}
}
f = 0;
}
else if (0 == f)
{
int dev;
dev = B[j] - A[i];
if (dev < 0)
dev += 10;
C[j] = (char)(dev+'0');
f = 1;
}
}
while (j >= 0)
{
C[j] = B[j];
j--;
}
cout << C;
return 0;
}