@Wolf5678

Как массив чисел перевести из char в int?

Как преобразовать массив чисел char в int в классе, который работает с "длинными" числами?
class Long
{
private:
	char arr[100];
public:
	Long();
	void input();
	void show();
	Long operator+(const Long& l1);
};


void Long::show()
{
	for (int i = 0; i < 5; i++)
	{
		cout << (arr1[i]);
	}
}

Long Long::operator+(const Long& l1)
{
	Long l2;
	int k = 0;
	for (int i = 4; i >= 0; i--)
	{
		if (i == 4)
		{
			if ((arr[i] + l1.arr[i]) >= 10)
			{
				l2.arr[i] = (arr[i] + l1.arr[i]) % 10;
				k = 1;
			}
			else if ((arr[i] + l1.arr[i]) < 10)
			{
				l2.arr[i] = (arr[i] + l1.arr[i]);
			}
		}
		if (i != 4)
		{
			if (k == 1)
			{
				l2.arr[i] = (arr[i] + l1.arr[i] + k) % 10;
				if ((arr[i] + l1.arr[i] + k) >= 10)
				{
					k = 1;
				}
				else if ((arr[i] + l1.arr[i] + k) < 10)
				{
					k = 0;
					continue;
				}
			}
			if ((arr[i + 1] + l1.arr[i + 1] + k) < 10)
			{
				if (k == 0)
				{
					l2.arr[i] = (arr[i] + l1.arr[i]) % 10;
					if ((arr[i] + l1.arr[i] + k) >= 10)
					{
						k = 1;
					}
					else if ((arr[i] + l1.arr[i] + k) < 10)
					{
						k = 0;
						continue;
					}
				}
				else if (k == 1)
				{
					l2.arr[i] = (arr[i] + l1.arr[i] + k);
					if ((arr[i] + l1.arr[i] + k) >= 10)
					{
						k = 1;
					}
					else if ((arr[i] + l1.arr[i] + k) < 10)
					{
						k = 0;
						continue;
					}
				}
			}
		}
	}
	return l2;
}

Я понимаю, что код написан очень коряво, но я бы хотел, чтобы в методе show выводилась сумма двух чисел. И вообще будет ли он работать с char?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Show вроде должен нормально работать для чисел длинной 5 цифр. Для этого не нужно приводить к int.
Long a, b;
a.input();
b.input();
Long sum = a + b;
sum.show();

Ваш код можно значительно упростить:
* Формула l2.arr[i] = (arr[i] + l1.arr[i] + k) % 10; работает и для первого разряда (i == 4 у вас), так как в начале k = 0.
* Значение k тоже можно без if посчитать: k = (arr[i] + l1.arr[i] + k) / 10;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы