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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2018, 00:57   #31
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,715
По умолчанию

Цитата:
Сообщение от HelloVikiend Посмотреть сообщение
А как сделать так чтобы оно позволяло выводить такие вот числа? 14263751237617836712637162
Оно итак позволяет. Если просто распарсить, то и будет список 1-4-2-6-3-...

Цитата:
Сообщение от HelloVikiend Посмотреть сообщение
идем с конца, 9+2 1 мы пишем 1 запомнили
вот и давайте начнем с первого шага: Пусть
Код:
struct list* list1, *list2;
суть два данных списка. Напишите: взять по элементу с конца и просуммировать с запоминаним переноса.
p51x вне форума Ответить с цитированием
Старый 05.06.2018, 01:11   #32
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Код:
void summa(list* tail1, list*tail2) {
	struct list* list1, *list2;
	int sum(0),sum1(0);
	list1 = tail1;
	list2 = tail2;
	while ((list1&&list2) != NULL)
	{
		sum += list1->field;
		list1 = list1->prev;
		sum1 += list2->field;
		list2 = list2->prev;
	}
	int summa = sum + sum1;
	printf("%i", summa);
	//return summa;
}
Я не знаю как сохранить остаток
HelloVikiend вне форума Ответить с цитированием
Старый 05.06.2018, 01:17   #33
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,715
По умолчанию

Не прыгайте раньше времени, а то опять бред понаписали.
Есть только:
Код:
struct list* list1, *list2;
Задача: взять последние элементы и сложить с запоминанием переноса.

Цитата:
Сообщение от HelloVikiend Посмотреть сообщение
Я не знаю как сохранить остаток
Ну вот выше, когда вы складывали 9 и 2 на последних позициях, что вы делали?
p51x вне форума Ответить с цитированием
Старый 05.06.2018, 11:05   #34
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Код:
void sum(list*tail1, list*tail2)
{
	int x,x1,y,x2,s,x3=0 ;
	list* list1=tail1, *list2=tail2;
	while ((list1) != NULL)
	{
		x = list1->field;
		list1 = list1->next;
		//x2 = list2->field;
		//list2 = list2->next;
	}
/if (s > 10)
	{
		y = x % 10;
	}
	x1 = x;
//	x3 = x2;
	printf("%i\n%i\n", x,y);

}
С одним списком пока получилось, с двумя еррорит в условии если пишу вот так list1&&list2
HelloVikiend вне форума Ответить с цитированием
Старый 05.06.2018, 11:10   #35
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,715
По умолчанию

Что у вас получилось?
1. Вам в функцию передадут не готовые хвосты, а указатель на начало списка.
2. Что вы вообще делаете? Просто проходите по списку и возвращаете первый разряд?

Цитата:
Сообщение от HelloVikiend Посмотреть сообщение
с двумя еррорит в условии если пишу вот так list1&&list2
Ну если вы писали как в прошлый раз (list1&&list2) != NULL, то естественно.

Так сумма, то где? Где переносы?
p51x вне форума Ответить с цитированием
Старый 08.06.2018, 13:43   #36
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Код:
list* sum(list*tail1, list*tail2)
{
	int x, y = 0, s;
	list* list1 = tail1, *list2 = tail2, *list3 = NULL, *last3 = NULL;

	while ((list1->next) != NULL)
	{
		list1 = list1->next;
	}

	while ((list2->next) != NULL)
	{
		list2 = list2->next;
	}

	while (list1 != NULL || list2 != NULL)
	{
		if (list1 != NULL && list2 != NULL)
		{
			s = list1->field + list2->field + y;
			y = 0;
			if (s < 10)
			{
				add(&list3, &last3, s);
			}
			else
			{
				s = s % 10;
				y = 1;
				add(&list3, &last3, s);
			}
			list1 = list1->prev;
			list2 = list2->prev;
		}
		else if (list1 == NULL)
		{
			if (y)
				add(&list3, &last3, list2->field + y);
			else add(&list3, &last3, list2->field);

			list2 = list2->prev;
			y = 0;
		}
		else if (list2 == NULL)
		{
			if (y)
				add(&list3, &last3, list1->field + y);
			else add(&list3, &last3, list1->field);
			list1 = list1->prev;
			y = 0;
		}
	}
	return list3;

}
В общем сумма у меня получилась, теперь нужно вычитание, как сделать вычитание?
HelloVikiend вне форума Ответить с цитированием
Старый 08.06.2018, 13:44   #37
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Код:
void add(list** first, list** tail, int value) {
	list* p = new list;
	p->next = NULL;
	p->prev = NULL;
	p->field = value;

	if (*first == NULL)
		*first = *tail = p;
	else {
		(*tail)->next = p;
		p->prev = *tail;
		*tail = p;
	}
}
Вот как добавляю элементы
HelloVikiend вне форума Ответить с цитированием
Старый 08.06.2018, 14:05   #38
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,715
По умолчанию

Цитата:
Сообщение от HelloVikiend Посмотреть сообщение
В общем сумма у меня получилась, теперь нужно вычитание, как сделать вычитание?
1 иф с y не нужен. От прибавки 0 ничего не изменится.
2. Точно также или мы опять начнем с начала?
p51x вне форума Ответить с цитированием
Старый 08.06.2018, 14:13   #39
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Да, вот я беру
Код:
	int s, y = 0;
	list* list1 = head1, *list2 = head2, *list3 = NULL, *last3 = NULL;
	while (list1->next != NULL)
	{
		list1 = list1->next;
	}
	while (list2->next != NULL)
	{
		list2 = list2->next;
	}
	while (list1 != NULL || list2 != NULL)
	{
		if (list1 != NULL && list2 != NULL)
		{
			if ((list1->field - list2->field + y) < 0) {
				y = 10;
				s = list1->field - list2->field + y;
				add(&list3, &last3, s);
			}
			else
			{
				add(&list3, &last3, s);
			}
			list1 = list1->prev;
			list2 = list2->prev;
		}
	}
Первое число вычитает как надо, а как сделать, чтобы у следующего разряд снижался, или если оно будет опять при вычитании меньше 0, то прибавлялось 10 и т.д?
HelloVikiend вне форума Ответить с цитированием
Старый 08.06.2018, 14:19   #40
HelloVikiend
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 33
По умолчанию

Код:
list* sub(list*head1, list*head2)
{
	int s, y = 0;
	list* list1 = head1, *list2 = head2, *list3 = NULL, *last3 = NULL;
	while (list1->next != NULL)
	{
		list1 = list1->next;
	}
	while (list2->next != NULL)
	{
		list2 = list2->next;
	}
	while (list1 != NULL || list2 != NULL)
	{
		if (list1 != NULL && list2 != NULL)
		{
			s = list1->field - list2->field + y;
			y = 0;
			if (s > 0)
			{
				add(&list3, &last3, s);
			}
			else
			{
				s = s + 10;
				y = 10;
				add(&list3, &last3, s);
			}
			list1 = list1->prev;
			list2 = list2->prev;
		}
	}
return list3;
}
считает вроде бы как надо, но добавляет лишнюю единицу в начало, при значениях 221-113
HelloVikiend вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны два целых числа A и B (A < B). Найти произведение всех целых чисел от A до B включительно. nadyaH Помощь студентам 10 29.10.2013 09:08
Сложить два 48 разрядных числа @Серж@ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.12.2011 20:17
MMX сложить два числа gansm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 29.10.2010 05:16
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 22:02
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27