@monolitHC
Внедряйте с нами, внедряйте больше нас

Как в С++ реализовать перемножение числовых значений?

Ребята, в С++ я совсем нуб, но очень хочу освоить этот язык, просто для себя.
По существу:
Все знают историю с шахматной доской, точнее с прогрессией 2 в 64 степени. И вот собственно решил написать программу, которая будет выводить значения от 1 до (ну там большое число получается). Я вообще в 1С пишу, и листинг кода по такой задаче будет выглядеть вот так:
А 		= 1;  
	Ит 		= 1;
	Сум 	        = 0;
	
	Пока Ит <= 63 Цикл 
		Сообщить(Строка(Ит)+"---"+Строка(А));
		Сум = Сум + А;
		А 	= А*2;
		Ит 	= Ит+1;
	КонецЦикла;
	
	Сообщить(Строка(Ит)+"---"+Строка(А));
	Сум = Сум + А;
	Сообщить("Результат количество: " + Строка(Сум),СтатусСообщения.Важное);
	Сообщить("Результат вес в кг: " + Строка(Окр(Сум*0.00004,2,РежимОкругления.Окр15как20)),СтатусСообщения.Важное);
	Сообщить("Результат вес в т: " + Строка(Окр(Сум*0.00004/1000,2,РежимОкругления.Окр15как20)),СтатусСообщения.Важное);

В С++ ну вот хоть убейте, не могу реализовать подобное, тип переменной int обрезает значения и ничего в итоге не получается
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Никакой стандартный тип в крестах не вместит число больше 2^64-1, так что ваша программа работать не будет.

Вам придется разбираться с длинной арифметикой, то есть с библиотекой типа GMP

Другое дело, что в данном конкретном случае как раз получится 2^64-1, так что в 64 бита все влезет, но если в шахматы добавить хоть одну клеточку - кина не будет.
Ответ написан
GavriKos
@GavriKos
Используйте другой тип, размерность которого позволит вывести нужное число. Всякие там unsigned long и прочее.
если их не хватает - гуглите про математику больших чисел.
Ответ написан
@YAnri
если не выше 2^64 то можно использовать unsigned long long
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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