Hi,
Can anyone tell me why this code give WA?
Thanks
Code: Select all
#include <stdio.h>
#include <string.h>
char buf1[100], buf2[100];
void reverse(char * begin, char * end)
{
char temp;
while(end > begin)
{
temp = *end;
*end-- = *begin;
*begin++ = temp;
}
}
void itoa(int value, char* str, int base)
{
static char num[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char * out = str;
if (base < 2 || base > 35)
{
*out = '\0';
return;
}
if(value == 0)
{
*out++ = '0';
}
else
{
int count = 0;
while(value != 0 && count < 13)
{
*out++ = num[value % base];
value = value / base;
count++;
}
}
*out = '\0';
reverse(str, out - 1);
}
int main()
{
int a, b;
char sign;
int value;
int numTests;
scanf("%d", &numTests);
for(int i = 0; i < numTests; i++)
{
scanf("%x %c %x", &a, &sign, &b);
if(sign == '+')
{
value = a + b;
}
else if(sign == '-')
{
value = a - b;
}
if (a >= 0 && b >= 0)
{
itoa(a, buf1, 2);
itoa(b, buf2, 2);
printf("%013s %c %013s = %d\n", buf1, sign, buf2, value);
}
else if(a < 0 && b >= 0)
{
itoa(-a, buf1, 2);
itoa(b, buf2, 2);
printf("-%013s %c %013s = %d\n", buf1, sign, buf2, value);
}
else if(b < 0 && a >= 0)
{
itoa(a, buf1, 2);
itoa(-b, buf2, 2);
if(sign == '+')
{
sign = '-';
}
else
{
sign = '+';
}
printf("%013s %c %013s = %d\n", buf1, sign, buf2, value);
}
else if(b < 0 && a < 0)
{
itoa(-a, buf1, 2);
itoa(-b, buf2, 2);
if(sign == '+')
{
sign = '-';
}
else
{
sign = '+';
}
printf("-%013s %c %013s = %d\n", buf1, sign, buf2, value);
}
}
return 0;
}