я новичок в программировании на С. Я написал этот код для добавления двух чисел со 100 цифрами, но я не знаю, почему код работает неправильно, он предполагает перемещение переноса, но это не так. а другая проблема заключается в том, что он просто игнорирует первую цифру (самую значащую цифру). может ли кто-нибудь помочь мне, пожалуйста?
#include <stdio.h>
#include <ctype.h>
int sum[101] = {0};
int add(int a, int b);
void main()
{
static int a[100];
static int b[100];
char ch;
int i = 0;
int t;
for (t = 0; t != 100; ++t)
{
a[t] = 0;
}
for (t = 0; t != 100; ++t)
{
b[t] = 0;
}
do
{
ch = fgetc(stdin);
if ( isdigit(ch) )
{
a[i] = ch - 48;
++i;
}
else
break;
}
while (ch != '\n' || i == 100 || i != '\0');
i = 0;
do
{
ch = fgetc(stdin);
if ( isdigit(ch) )
{
b[i] = ch - 48;
++i;
}
else
break;
}
while (ch != '\n' || i == 100 || i != '\0');
for (;i!=0; --i)
{
add(a[i], b[i]);
}
for (i==0;i != 101; ++i)
{
printf("%d", sum[i]);
}
}
int add( int a , int b)
{
static int carry = 0;
float s = 0;
static int p = 101;
if (0 <= a+b+carry <= 9)
{
sum[p] = (a + b + carry);
carry = 0;
--p;
return 0;
}
else
{
if (10 <= a+b+carry < 20)
{
s = (((a+b+carry)/10.0 ) - 1) * 10 ;
carry = ((a+b+carry)/10.0) - (s/10);
}
else
{
s = (((a+b+carry)/10 ) - 2) * 10;
carry = ((a+b+carry)/10.0) - (s/10);
}
sum[p] = s;
--p;
return 0;
}
}
int main
, а неvoid
- person Ryan Haining   schedule 10.02.2015while (ch != '\n' || i == 100 || i != '\0');
- это действительно запутано - person M.M   schedule 10.02.2015for (i==0;i != 101; ++i)
должно бытьfor (i = 0; i != 101; ++i)
- person Anto Jurković   schedule 10.02.2015a
иb
имеют разное количество значащих цифр. - person John Bollinger   schedule 10.02.2015if (0 <= a+b+carry <= 9)
? - person Anto Jurković   schedule 10.02.2015