Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ бинарное дерево http://www.cyberforum.ru/cpp-beginners/thread588706.html
Нужна программа построение бинарного дерева ключом к которому является номер зачетной книжки студента, а информационная часть величина типа char, содержащая фамилию студента, написать функцию которая...
C++ Функция изменяющая сразу несколько строк Нужно, чтобы функция редактировала несколько входящих строк. char str1; char str2; void function1(char*& str1, char*& str2) Вышеприведённый код кривой, ибо, как гласит гугл, на входе имеем... http://www.cyberforum.ru/cpp-beginners/thread588700.html
Варианты получения времени и даты C++
Здравствуйте всем! Возник такой вот вопрос: в проекте visual c++ (windows form приложение) мне понадобилось получить текущий час и записать его как число в переменную. Честно пытался разобраться сам,...
Написать и протестировать функцию. C++
никак не могу сделать!даже не знаю с чего начать!!!!
C++ Создать класс http://www.cyberforum.ru/cpp-beginners/thread588649.html
Здравствуйте. Имеется код(исправный) программы для деления многочлена на многочлен. Подскажите пожалуйста как мне создать класс на основе этого кода? #include <stdio.h> #include <math.h> void...
C++ Даны натуральные число N и вещественное f. Вычислить Даны натуральные число N и вещественное f. Вычислить. подробнее

Показать сообщение отдельно
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 05:49
Довольно долго думал - нашел как исхитриться и дойти примерно в 2 раза дальше. Но это тоже не вариант, поэтому делаем следующим образом:

Создаём тип данных - большой (нам хватит 400 элементов) массив из переменных типа булеан. Там мы будем хранить числа, записанные в 2ичной системе исчисления. 400 элементов хватит потому, что 24 = 16, что есть больше 10, значит 2400 значилеьно больше 10100.

Пишется простенькая функция умножения 2ух чисел, заданных в данном виде. бежим 2мя циклами по обеим строкам, и если а[i]=1 и b[j]=1, то с[i+j]++. Если с[i+j] после увеличения стало 0, значит прошёл перенос в следующий разряд, он делается циклом до тех пор, пока в итоге переноса наш увеличившийся разряд не примет значение 1, то бишь для него переноса нету.

Аналогично пишется функция суммы. Кстати умножение можно через сумму написать, но тогда желательно юзануть inline. Но можно и без инлайна, нам скорость работы программы в данном случае не важна, всё и так будет быстро.

Далее, у нас есть переменная Х, которая хранит число кратное 2n, есть переменная, которая хранит 10n. Переменную со значением 10n умножаем на 10102 (что равно 1010), получаем 10n+1.Плюсуем результат к Х, смотрим делится ли на 2n+1. Если нет - плюсуем ещё раз.

Такой переход делаем 100 раз, и получаем число из 1 и 2, которое делится на 2100, причём любой его кусок из Ы последних цифр делится на 2Ы

Для удобной подачи в 10ичной записи нужно сохранять в отдельном массиве что мы дописывали на каждом шаге - единичку или двоечку. Вывод на экран будет M первых элементов массива в обратном порядке.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru