Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 17:41   #1
Dj Troy
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 16
Сообщение В чём может быть ошибка.

Пишу программу по умножению одного большого числа на другое. Их сумму и вычитание он считает правильно. А в ответе умножения пишет 0. В чём может быть проблемма.
Отрывок кода умножения
Код:
HugeInteger HugeInteger::multiply(HugeInteger firstNumber, HugeInteger secondNumber) {
	      int element = 0, digit = 0;
	      HugeInteger final, numbers;
	    
	      element = sizeof digitArray - 1;
	    
	      while (element >= 0) {
	         digit = secondNumber.digitArray[element]-'0';
	         final = final.additionalMultiply(firstNumber, digit, element);
	         numbers.add(numbers, final);
	         element--;
	      } // конец оператора
	    
	      for (int factor = 0; factor < sizeof digitArray - 1; factor++) {
	         digitArray[factor] = numbers.digitArray[factor];
	      } /// конец цикла
	      return numbers;
	   }    // конец функции умножения
	 
	    HugeInteger HugeInteger::additionalMultiply(HugeInteger firstNumber, int digit, int position) {
	      int element = 0, firstTemporary = 0, secondTemporary = 0, multipliedResult = 0, value = 0, carry = 0;
	      HugeInteger final;
	    
	      element = sizeof digitArray - 1;
	    
	      for (int factor = position; factor < 40; factor++) {
	         digit *= 10;
	      } // конец цикла
	    
	      while (element >= 0) {
	         secondTemporary = digit;
	         firstTemporary = firstNumber.digitArray[element]-'0';
	         multipliedResult = firstTemporary * secondTemporary + carry;
	         carry = multipliedResult / 10;
	         value = multipliedResult % 10;
	         final.digitArray[element] = value + '0';
	         element--;
	      } // конец оператора while
	    
	      if (carry > 0) {       // проверка переполнения
	         for (int element = 0; element < 40; element++) {
	            digitArray[element] = '0';
	            digitArray[40] = '\0';
	         }  // конец цикла
	         final.error = true;
	      } // конец if
	      return final;
	   }  // конец функции умножения
Dj Troy вне форума Ответить с цитированием
Старый 20.04.2011, 19:22   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Эт называется отладьте за меня мой код? ) Просто посмотри в Watches где там у тебя в результат записывается 0 и откуда он таки берется, все станет ясно.
mMAg вне форума Ответить с цитированием
Старый 20.04.2011, 20:40   #3
Dj Troy
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 16
По умолчанию

mMAg, я в dev ccp не знаю там где он находится
Dj Troy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - память не может быть read volf Софт 31 20.08.2015 16:39
В чем может быть ошибка? nervniy БД в Delphi 2 21.10.2010 15:47
помотрите в чем может быть ошибка zizu Помощь студентам 2 26.04.2010 10:16
где может быть ошибка? maksim_serg Microsoft Office Excel 2 21.04.2010 10:42
чем может быть вызвана эта ошибка doncova1 Общие вопросы Delphi 5 01.03.2007 11:15