Целая часть квадратного корня из длинного числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не могу понять, почему программа, в которой массив объявлен глобально, работает неверно (выдаёт полный трэш), но та же программа, с массивом в мэйне, - верно. Вот код:
#include 
int 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; jd[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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы