You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.5 KiB
C

/*
* C Program to Perform Binary Addition of Strings and Print it
*/
#include <stdio.h>
#include <string.h>
/* global variables */
char s1[10], s2[10], s3[10];
int i, k;
char carry = '0';
/* function prototype */
void binary_add(char *,char *);
void main()
{
printf("enter string1\n");
scanf(" %[^\n]s", s1);
printf("enter string2\n");
scanf(" %[^\n]s", s2);
binary_add(s1, s2);
printf("binary addition of number is\n");
if (carry == '1')
{
s3[i] = '1';
for (i = 1; i <= k + 1; i++)
printf("%c", s3[i]);
printf("\n");
}
else
{
for (i = 1; i <= k + 1; i++)
printf("%c", s3[i]);
printf("\n");
}
}
/* function to add two binary numbers in a string */
void binary_add(char *s1, char *s2)
{
char *p1, *p2;
p1 = s1;
p2 = s2;
k = strlen(s1);
for (; *p1 != '\0' && *p2 != '\0'; p1++, p2++);
p1--;
p2--;
s3[k+1] = '\0';
for (i = k + 1; i >= 1; i--, p1--, p2--)
{
if (*p1 == '0' && *p2 == '0'&& carry == '0')
{
s3[i] = (*p1 ^ *p2) ^ carry;
carry = '0';
}
else if (*p1 == '0' && *p2 == '0' && carry == '1')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '0';
}
else if (*p1 == '0' && *p2 == '1' && carry == '0')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '0';
}
else if (*p1 == '0' && *p2 == '1' && carry == '1')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '1';
}
else if (*p1 == '1' && *p2 == '0' && carry == '0')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '0';
}
else if (*p1 == '1' && *p2 == '0' && carry == '1')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '1';
}
else if (*p1 == '1' && *p2 == '1' && carry == '0')
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '1';
}
else
{
s3[i] = (*p1 ^ *p2)^ carry;
carry = '1';
}
}
}