Целая часть квадратного корня из длинного числа - C (СИ)
Формулировка задачи:
Не могу понять, почему программа, в которой массив объявлен глобально, работает неверно (выдаёт полный трэш), но та же программа, с массивом в мэйне, - верно. Вот код:
#includeint h,w,k,z,e,g,j,i,y; // c - остаток ; d - вычитаемое ; int main() { char q,a[3101],c[1510],d[1510]; while ((g=getchar())<49 || g>57); a[k++]=g-48; // k - размер числа a (к-во цифр) while ((g=getchar())>47 && g<58) a[k++]=g-48; if (k&1) g=a[z++]; else g=a[z++]*10+a[z++]; // z - позиция следующей цифры (a[z]) for (j=1; j<=g; j+=2) { g-=j; w++; } printf("%d",w); j--; if (z==k) return 0; if (j<9) { d[0]=j; d[1]=1; y=2; } // y - размер числа d (вычитаемое) else { d[0]=j/10; d[1]=j%10; d[2]=1; y=3; } c[0]=g/10; c[1]=g%10; // е - размер числа С с ведущими нулями c[2]=a[z++]; c[3]=a[z++]; e=g=4; // g - чистый размер числа С (остаток) for (j=0; j d[i++]) j=e; } } if (q) break; // --------------//------------- i=y; w++; for (j=e; j-->h;) { // вычитаем : c = c - d ; if (i) c[j]-=d[--i]; if (c[j]<0) { c[j]+=10; c[j-1]--; } } for (j=h; j Программа вычисляет целую часть квадратного корня из длинного числа (от 1 до 10^3000). Если скомпилировать этот код, набрать 3000 девяток во входном файле и запустить это всё на выполнение, то на выходе получается правильный ответ, то есть 1500 девяток. Но если поменять в коде третью и четвёртую строку, то есть все переменные типа char объявить глобально, то начинается что-то непонятное. Первые 758 цифр ответа вычисляются правильно, а дальше - ерунда какая-то. То, что переменные объявленные глобально инициализируются нулями, в этой программе значения не имеет для всех переменных типа char. Это важно только для некоторых переменных типа int. Попробуйте, пожалуйста, воспроизвести глюк и напишите Ваш результат. И конечно если кто-то сможет объяснить в чём проблема буду рад.
Решение задачи: «Целая часть квадратного корня из длинного числа»
textual
Листинг программы
number[numberSize++] = int_to_char(remainderSize);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д