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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2015, 22:10   #1
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию Класс "БольшиеЧисла" ошибка при 7 значных числах

Если длина числа равна 7 символов, то последний символ отображается не правильно. Подскажите где ошибка?
Код:
#include <iostream.h>
#include <string.h>

class HugeInt{
	friend ostream &operator<< (ostream &, const HugeInt &);
//	friend istream &operator>> (ostream &, HugeInt &);
 public:
	HugeInt(const char *);
//	HugeInt(int = 0);
//	HugeInt(HugeInt);
	~HugeInt();
//	HugeInt operator+ (HugeInt &);
//	HugeInt operator= (HugeInt &);
	void info();

 private:
	short *integer;
	int size;
	bool znak;
};
//--------------------
HugeInt::HugeInt(const char *string){
 znak = true;
 size = strlen(string) - 1;
 int i, j = 0;
//если число отрицательное
 if (string[0] == '-') {
	 znak = false;
	 ++j;
	}
//чтобы не было лишних нолей в начаде
 for ( ; string[j] == '0' && j != size; j++);

 integer = new short[size -= j];
 for (i = 0; i <= size; i++, j++) {
	integer[i] = string[j] - '0';
	}
}
//--------------------
HugeInt::~HugeInt(){
 delete [ ] integer;
}
//--------------------
void HugeInt::info(){
 cout << "\n*this = " << *this;
 cout << "\nsize = " << size
	  << "\nznak = " << (znak == true ? "\" + \"" : "\" - \"");
 for (int i = 0; i <= size; i++) {
	cout << "\ninteger[" << i << "] = " << integer[i];
	}
 cout << "\n\tSizeOf = " << sizeof(*this) << endl;
}
//--------------------
ostream &operator<< (ostream &output, const HugeInt &num){
 if (num.size == 0 && num.integer[0] == 0) {
	return output << 0;
	}
 if (!num.znak ) {
	output << '-';
	}
 for (int i = 0 ; i <= num.size; i++)
	output << num.integer[i];

 return output;
}

//--------------------

int main(){
 HugeInt hi1("-00000123456789");
 HugeInt hi2("1234567");
 char str[] = "-1234567";
 HugeInt hi3(str);
 cout << "\nhi1 = " << hi1 ; hi1.info();
 cout << "\nhi2 = " << hi2 ; hi2.info();
 cout << "\nhi3 = " << hi3 ; hi3.info();
 cout << endl << endl;
system("pause");
return 0;
}
в hi2 и hi3 вот такой ответ(кроме znak)
Код:
hi2 = 12345613104
*this = 12345613104
size = 6
znak = " + "
integer[0] = 1
integer[1] = 2
integer[2] = 3
integer[3] = 4
integer[4] = 5
integer[5] = 6
integer[6] = 13104
        SizeOf = 12
похожий эффект, при 11-ти значный числах.
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NOD 32 выругался при заходе в тему "Литература в помощь при работе с базами данных", что в разделе "БД в Delphi" Вадим Мошев О форуме и сайтах клуба 4 09.11.2014 10:14
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06