Member 13906640 Ответов: 3

Ошибка простой вывод C++


здравствуйте, помогите простой выходной программе..
когда int очень большой-это ошибка..
есть ли лучшее решение?
любить
n = 1000000000000
k = 1000000000001
это будет ошибкой

Что я уже пробовал:

long long n;
  long long k;
	unsigned int count = 0;
	cin >> n >> k;
	for(int i = 1; i <= n; i++)
	{
		for(int y = i+1; y <= n; y++)
		{
			if(i + y == k)
			{
				count = count + 1;
			}
		}
	}
	cout << count << endl;
	return 0;

3 Ответов

Рейтинг:
2

Jochen Arndt

На большинстве платформ Тип C/C++ unsigned int имеет 32-битную ширину. Это означает максимум. десятичное значение равно 4 294 967 295, что меньше 1 000 000 000 000.

Если вам нужны большие значения используйте 64 битные значения: unsigned long long или uint64_t (включать cstdint с помощью C++11 или stdint.ч).


Рейтинг:
0

Rick York

Вы использовали тип long long для n и k, и он также должен быть использован для i, y и k, потому что, как писал Йохен, предел для count будет достигнут раньше, чем он будет достигнут для n и k.


Рейтинг:
0

Patrice T

Вы знаете, что есть разные типы целых чисел, разных размеров.
Вы должны быть последовательны, вы не можете иметь n и k как долго долго типа и ожидать, чтобы использовать целые числа в качестве счетчиков с N в качестве предельной петле.

2 вложенных цикла очень простодушны, и поэтому грубая сила.
Возьмите лист бумаги и карандаш и решите задачу с небольшими значениями, напишите каждое решение или измените свой код, чтобы напечатать i и j для каждого решения.
сделайте небольшой анализ, вы должны легко быть в состоянии удалить внутреннюю петлю.
при дальнейшем анализе вы можете удалить обе петли и найти математическую формулу, которая даст вам прямой ответ.