Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
lumpochka
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 10
#1

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

28.05.2012, 04:09. Просмотров 1519. Ответов 4
Метки нет (Все метки)

Дано натуральное число 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;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 04:09
Ответы с готовыми решениями:

Дано натуральное число N. Найти наименьшее число М (N< M< 2N), которое делится на сумму цифр числа N (без оста
Дано натуральное число N. Найти наименьшее число М (N&lt; M&lt; 2N), которое делится...

Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке. Например, дано число 156, нужно получ
Вобщем,если не сложно,именно саму функцию помочь написать,ибо я просто не могу...

Дано двузначное натуральное число. Получить другое натуральное число, в котором порядок цифр изменен на противоположный
Помогите пожалуйста,Дано двузначное натуральное число. Получить другое...

Дано натуральное число n<100. Поменять порядок цифр числа на обратный.
Дано натуральное число n&lt;100. Поменять порядок цифр числа на обратный. ...

Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка
Дано натуральное четырехзначное число. Определить все цифры в цифровой записи...

4
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 05:18 #2
то, что считает до 10значного ничего странного, ибо

C++
1
2
int d;
d=pow(10,i);
Видать 10 в 11той степени > 8 в 11той = 2 в 33тей. Хоть 33 и прекрасная степень, но больше чем 32.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8053 / 4897 / 1426
Регистрация: 29.11.2010
Сообщений: 13,287
28.05.2012, 05:21 #3
Используй в качестве хранения числа символьный массив.
0
lumpochka
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 10
28.05.2012, 05:43  [ТС] #4
Я пыталась использовать для хранения числа символьный массив. Но у меня не получается по-другому реализовать эту задачку.. Видимо, знаний не хватает.. Если не затруднит, напишите, как это можно сделать.
0
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 05:49 #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 первых элементов массива в обратном порядке.
1
28.05.2012, 05:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 05:49

Дано натуральное число N. Получить новое число М, которое образуется из числа N
Дано натуральное число N. Получить новое число М, которое образуется из числа N...

Дано натуральное число m. Найти такое натуральное n, что двоичная запись n получается из двоичной записи m изменением порядка цифр на обратный (
Дано натуральное число m. Найти такое натуральное n, что двоичная запись n...

Найти натуральное число M такое, что M делится на N и сумма цифр M делится на N
256 мегабайт, 2 секунды Задано натуральное число N (1 ≤ N ≤ 100 000)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru