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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
lumpochka
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 10
28.05.2012, 04:09     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N #1
Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2^N.
Входные данные: в единственной строке задаётся число N (1 <= N <= 100).
Выходные данные: одно число из N цифр.
Примечание: стандартный целый тип позволяет хранить целые числа до 2^31.


Вот я написала программку. Она считает только до числа, которое делится на 2^10. А дальше не считает. Возможно, причина в том, что число не помещается в определённый мной тип переменной. Но я в этом мало что понимаю, я новичок. Может, кто-нибудь, подскажет, или исправит мой код? Ну очень нужно!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char* argv[])
{int i,a,b,c,d;
double k,s;
long chislo=2;
for(int i=1;i<=31;i++)
{k=2;
a=pow(k,i);
b=pow(k,i+1);
if(chislo%a==0&&chislo%b==0)
        {s=10;
       d=pow(s,i);
       chislo=chislo+k*d;}
else {s=10;
    d=pow(s,i);
    c=k*d; 
   chislo=chislo+d;}
}
cout<<chislo;
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 04:09     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N
Посмотрите здесь:

Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке C++
C++ Дано натуральное число m. Найти такое натуральное n, что двоичная запись n получается из двоичной записи m изменением порядка цифр на обратный (
C++ Дано двузначное натуральное число. Получить другое натуральное число, в котором порядок цифр изменен на противоположный
C++ Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке. Например, дано число 156, нужно получ
C++ Дано натуральное число n<100. Поменять порядок цифр числа на обратный.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 05:18     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N #2
то, что считает до 10значного ничего странного, ибо

C++
1
2
int d;
d=pow(10,i);
Видать 10 в 11той степени > 8 в 11той = 2 в 33тей. Хоть 33 и прекрасная степень, но больше чем 32.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
28.05.2012, 05:21     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N #3
Используй в качестве хранения числа символьный массив.
lumpochka
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 10
28.05.2012, 05:43  [ТС]     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N #4
Я пыталась использовать для хранения числа символьный массив. Но у меня не получается по-другому реализовать эту задачку.. Видимо, знаний не хватает.. Если не затруднит, напишите, как это можно сделать.
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 05:49     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N #5
Довольно долго думал - нашел как исхитриться и дойти примерно в 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 первых элементов массива в обратном порядке.
Yandex
Объявления
28.05.2012, 05:49     Дано натуральное число N (N <= 100). Построить натуральное число, состоящее из N цифр и содержащее только цифры 1 и 2, которое делится на 2N
Ответ Создать тему
Опции темы

Текущее время: 07:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru