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

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

28.05.2012, 04:09. Просмотров 2496. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2012, 04:09
Ответы с готовыми решениями:

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

Выяснить, делится ли на 7 натуральное число, состоящее не более чем из 60 цифр
Петя Васечкин хочет выяснить, делится ли на 7 натуральное число, состоящее не более чем из 60 цифр....

Дано натуральное число:верно ли что в данном числе сумма цифр больше и а само число делится на b
Помогите решить задачу на отчет: Дано натуральное число:верно ли что в данном числе сумма цифр...

Дано натуральное число b. Верно ли, что в данном числе сумма цифр больше b, а само число делится на а.
1.Дано натуральное число b. Верно ли, что в данном числе сумма цифр больше b, а само число делится...

4
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
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
28.05.2012, 05:21 3
Используй в качестве хранения числа символьный массив.
0
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 10
28.05.2012, 05:43  [ТС] 4
Я пыталась использовать для хранения числа символьный массив. Но у меня не получается по-другому реализовать эту задачку.. Видимо, знаний не хватает.. Если не затруднит, напишите, как это можно сделать.
0
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2012, 05:49

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

Дано натуральное число:верно ли что в данном числе сумма цифр больше а и само число делится на b
Помогите решить задачу на отчет: Дано натуральное число:верно ли что в данном числе сумма цифр...

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

63. Дано натуральное число n (n<10000). Вывести минимальное число, которое получится из цифр числа n
Нек разрешается использовать массив.

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


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

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

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