Reputation: 41
The code written below is working out quite fine but gives out only one error which I cannot find out why. When we add numbers like 99+1
or 999+1
it prints only the zeroes but not one. If you point out the error in the code and correct it i would rather be thankful for your help.
#include<stdio.h>
int main()
{
int num1[255], num2[255], sum[255];
char s1[255], s2[255];
int l1, l2,h;
printf("Enter Number1:");
scanf("%s", &s1);
printf("Enter Number2:");
scanf("%s", &s2);
for (l1 = 0; s1[l1] != '\0'; l1++)
num1[l1] = s1[l1] - 48;
for (l2 = 0; s2[l2] != '\0'; l2++)
num2[l2] = s2[l2] - 48;
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++)
{
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
if(l1==0 && carry==1)
{
sum[k++]=1;
}
else if (l1 > l2)
{
while (i >= 0)
{
sum[k++] = (num1[i--] + carry)%10 ;
carry = (num1[i]+carry)/10;
}
if(i==0&&carry==1)
{
sum[k++]=carry;
}
}
else if(l1<l2)
{
while (j >= 0)
{
sum[k++] = (num2[j--] + carry)%10 ;
carry = (num2[j]+carry)/10;
}
if(j==0&&carry==1)
{
sum[k++]=carry;
}
}
printf("Result:");
for (k--; k>= 0; k--)
printf("%d", sum[k]);
return 0;
}
Upvotes: 2
Views: 114
Reputation: 308
Try this code. I think this should help you.
#include<stdio.h>
int main()
{
int num1[255], num2[255], sum[255];
char s1[255], s2[255];
int l1, l2,h;
printf("Enter Number1:");
scanf("%s", &s1);
printf("Enter Number2:");
scanf("%s", &s2);
for (l1 = 0; s1[l1] != '\0'; l1++)
num1[l1] = s1[l1] - '0';
for (l2 = 0; s2[l2] != '\0'; l2++)
num2[l2] = s2[l2] - '0';
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++)
{
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
//if num2 has more digits than num1
if(i==-1 && j>=0)
{
while(j>=0)
{
sum[k++]=(num2[j]+carry)%10;
carry=(num2[j]+carry)/10;
j--;
}
}
//if num1 has more digits than num2
if(i>=0 && j==-1)
{
while(i>=0)
{
sum[k++]=(num1[i]+carry)%10;
carry=(num1[i]+carry)/10;
i--;
}
}
// both has reached to their last digits position and suppose the carry is still left
if(i==-1 && j==-1)
{
if(carry>0)
sum[k++]=carry;
}
printf("Result:");
for (k=k-1; k>= 0; k--)
printf("%d", sum[k]);
return 0;
}
Upvotes: 0
Reputation: 8614
In the while loop (i>=0), you are decrementing the index i
in the sum step. You are using this index again in the carry step below. You should decerement it at the next carry step.
The if
condition after that, is if(i==0&&carry==1)
i
will be always -1 at the end of the loop. So the conditionfor i==0
can be removed.
The fixed code is below.
#include<stdio.h>
int main() {
int num1[255], num2[255], sum[255];
char s1[255], s2[255];
int l1, l2,h;
printf("Enter Number1:");
scanf("%s", s1);
printf("Enter Number2:");
scanf("%s", s2);
for (l1 = 0; s1[l1] != '\0'; l1++)
num1[l1] = s1[l1] - 48;
for (l2 = 0; s2[l2] != '\0'; l2++)
num2[l2] = s2[l2] - 48;
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++) {
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
if(l1==0&&carry==1)
{
sum[k++]=1;
}
else if (l1 > l2) {
while (i >= 0) {
sum[k++] = (num1[i] + carry)%10 ;
carry = (num1[i--]+carry)/10;
}
if(carry==1)
{
sum[k++]=carry;
}
} else if(l1<l2) {
while (j >= 0) {
sum[k++] = (num2[j] + carry)%10 ;
carry = (num2[j--]+carry)/10;
}
if(carry==1)
{
sum[k++]=carry;
}
}
printf("Result:");
for (k--; k>= 0; k--)
printf("%d", sum[k]);
return 0;
}
Test1
Enter Number1:99
Enter Number2:2
Result:101
Test2
Enter Number1:22
Enter Number2:99998
Result:100020
Upvotes: 2
Reputation: 26637
You need to write the carry counter, and then read it. You code only needed a minor adjustment for the carry, then it works.
#include <stdio.h>
int main() {
int num1[255], num2[255], sum[255];
char s1[255], s2[255];
int l1, l2;
printf("Enter Number1:");
scanf("%s", s1);
printf("Enter Number2:");
scanf("%s", s2);
for (l1 = 0; s1[l1] != '\0'; l1++)
num1[l1] = s1[l1] - '0';
for (l2 = 0; s2[l2] != '\0'; l2++)
num2[l2] = s2[l2] - '0';
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++) {
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
if (l1 > l2) {
while (i >= 0) {
sum[k++] = (num1[i] + carry) % 10;
carry = (num1[i--] + carry) / 10;
}
if (sum[k - 1] != carry)
sum[k++] = carry;
} else if (l1 < l2) {
while (j >= 0) {
sum[k++] = (num2[j] + carry) % 10;
carry = (num2[j--] + carry) / 10;
}
if (sum[k - 1] != carry)
sum[k++] = carry;
} else {
if (carry > 0)
sum[k++] = carry;
}
printf("Result:");
for (k--; k >= 0; k--)
printf("%d", sum[k]);
return 0;
}
Test
Enter Number1:99
Enter Number2:1
Result:100
Test 2
Enter Number1:9999999999999999999999999999999999
Enter Number2:1
Result:10000000000000000000000000000000000
Upvotes: 2