sa [i] + sb [i] + st - 2 * '0'
отрицательно. Поскольку вы делаете sa[i + 1] = '1'
, то strlen(sa)
get увеличивается на l oop. Из-за этого sb[i]
равно 0, потому что это символ завершения нуля при последнем запуске, когда i == strlen(sa) == 2
. Тогда вычисление становится следующим:
sa[i] + sb[i] + st - 2 * '0' =
'1' + 0 + 1 - 2 * '0' =
49 + 0 + 1 - 2 * 48 =
50 - 96 =
-46
Поскольку это минус 46, sa [i] becomaes:
a[i] = ( sa[i] + sb[i] + st - 2 * '0' ) %10 + '0' =
-46 %10 + '0' =
-6 + '0' =
'*'
Скорее всего, в l oop:
for( i = 0; i < strlen( sa ); i++ ){
Вы должны позаботиться о том, что происходит, когда длины строк не равны. Вы делаете sa[i] = '1'
, но sb
остается прежним. Думаю, сейчас вы можете это исправить, заменив
sa[i] + sb[i] + st - 2 * '0'
чем-то вроде:
sa[i] - '0' + (sb[i] ? sb[i] - '0' : '0') + st
Примечания: мне не нравятся ваши отступы. Пожалуйста, сделайте ваш код максимально читабельным. Используйте новые строки для обозначения новых выражений. Используйте {
}
для обозначения места ввода l oop или тел.