Tried all the test cases available. Works fine for all. But still wrong answer. If anyone can help me out, I would be grateful
using namespace std;
void addition(char*result, char*x, char*y);
void subtraction(char*result, char*x, char*y);
void make_diff_equal(char*sum, char*diff);
void by2(char*result, char*num);
void reverse(char*x);
void remove_zeroes(char*x);
int check_odd(char*x);
int main()
{
char num_of_apples[105], difference[105], result[105], klaudia[105], julka[105], arr[106];
int i = 0, flag = 0;
while (i < 10) {
flag = 0;
cin >> num_of_apples >> difference;
make_diff_equal(num_of_apples, difference);
reverse(num_of_apples);
reverse(difference);
addition(result, num_of_apples,difference);
reverse(result);
if (check_odd(result)) {
flag = 1;
}
reverse(result);
by2(klaudia, result);
remove_zeroes(klaudia);
reverse(klaudia);
if (flag) {
strcpy(arr, klaudia);
subtraction(julka, klaudia, difference);
flag = 0;
}
else {
strcpy(arr, klaudia);
subtraction(julka, num_of_apples, klaudia);
}
remove_zeroes(julka);
reverse(arr);
cout << arr << endl << julka << endl;
i++;
}
}
void addition(char*result, char*x, char*y)
{
int len1 = strlen(x);
int len2 = strlen(y);
int i = 0, sum, carry;
sum = (x[0] - '0') + (y[0] - '0');
carry = sum / 10;
result[0] = sum % 10 + '0';
i = 1;
while (i < len1 && i < len2) {
sum = (x[i] - '0') + (y[i] - '0');
result[i] = (sum+carry)%10 + '0';
carry = (sum+carry) / 10;
i++;
}
if (carry)
result[i++] = carry + '0';
result[i] = '\0';
reverse(result);
}
void subtraction(char*result, char*x, char *y)
{
int len1 = strlen(x);
int len2 = strlen(y);
int i = 0, sub, borrow;
if ((x[0] - '0') >= (y[0] - '0'))
{
sub = (x[0] - '0') - (y[0] - '0');
borrow = 0;
result[0] = sub+'0';
}
else {
sub = (x[0] - '0')+10 - (y[0] - '0');
result[0] = sub+'0';
borrow = 1;
}
i++;
while (i < len1 && i < len2) {
int temp = i;
if (borrow) {
while ((x[i] - '0') == 0 && i<len1) {
x[i] = 9 + '0';
i++;
}
x[i] = ((x[i] - '0') - 1 )+ '0';
borrow = 0;
}
i = temp;
if (i < len1) {
if ((x[i] - '0') >= (y[i] - '0')){
sub = (x[i] - '0') - (y[i] - '0');
borrow = 0;
result[i] = sub + '0';
}
else {
sub = (x[i] - '0') + 10 - (y[i] - '0');
result[i] = sub + '0';
borrow = 1;
}
}
i++;
}
result[i] = '\0';
reverse(result);
}
void reverse(char*x)
{
int len = strlen(x);
int i, j;
for (i = 0, j = len - 1; i < len / 2; ++i, --j)
{
char temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
void make_diff_equal(char*sum, char*diff)
{
int i, j;
int len1 = strlen(sum);
int len2 = strlen(diff);
if (len2 != len1) {
for (i = len1-1, j = len2 - 1; j >= 0; --i, --j) {
diff[i] = diff[j];
}
for (i = 0; i < (len1 - len2); ++i) {
diff[i] = '0';
}
diff[len1] = '\0';
}
}
void by2(char*result, char*num)
{
int len = strlen(num), i, carry;
if ((num[0] - '0') % 2 == 0) {
result[0] = ((num[0] - '0') / 2) + '0';
carry = 0;
}
else {
if ((num[0] - '0') == 1)
result[0] = 0 + '0';
else
result[0] = ((num[0] - '0') / 2) + '0';
carry = 1;
}
for (i = 1; i < len; ++i) {
if (carry) {
if (((num[i] - '0')+10) % 2 == 0)
carry = 0;
else
carry = 1;
result[i] = (((num[i] - '0')+10) / 2) + '0';
}
else {
if ((num[i] - '0') % 2 == 0) {
result[i] = ((num[i] - '0') / 2) + '0';
carry = 0;
}
else if ((num[i] - '0') == 1) {
result[0] = 0+'0';
carry = 1;
}
else {
result[i] = ((num[i] - '0') / 2) + '0';
carry = 1;
}
}
}
result[i] = '\0';
}
void remove_zeroes(char*x)
{
int len = strlen(x);
int i, pos = -1, j;
if (len > 1) {
for (i = 0; i < len; ++i) {
if (x[i] != '0') {
pos = i;
break;
}
}
if (pos >= 0) {
for (i = 0, j = pos; j < len; ++i, j++) {
x[i] = x[j];
}
x[i] = '\0';
}
else
x[1] = '\0';
}
}
int check_odd(char*x)
{
return (x[0] - '0') % 2 == 0 ? 0 : 1;
}