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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
tsvet123
Сообщений: n/a
#1

Некоторое число оканчивается на 2 - C++

23.12.2012, 13:20. Просмотров 2641. Ответов 15
Метки нет (Все метки)

напишите 2 задачки пожалуйста
1)Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится.Найти это число.
2)Найти количество делителей натурального числа N больших K
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 13:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некоторое число оканчивается на 2 (C++):

Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число - C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число.

Оканчивается ли число на 1? - C++
Помогите пожалуйста с алгоритмом, мне нужно определить, когда число оканчивается на 1 (кроме 11), т.е. 1, 21, 31, 41 и т.д.

Выяснить нечетное ли число и оканчивается ли на 6. - C++
Хелп,что-то не доходит как решить задачку с помощью вайл,фор. 1.Дано натуральное число. Выяснить нечетное ли оно и оканчивается ли на 6. ...

Найти, на сколько нулей оканчивается число N - C++
Вводится N. Необходимо найти, на сколько нулей оканчивается чило N! Нашел решение этой задачи на языке паскаль но с переводом...

Проверка на какую цифру оканчивается число - C++
Задание: сделать проверку, является ли число кратным и при этом не заканчиваться цифрой 3. Проверку на кратность я сделал, это не сложно...

Определить оканчивается ли целое число цифрой 7 - C++
1. Если целое число М делится нацело на целое число К, то вывести на экран частное от деления, в противном случае вывести сообщение" "М на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
23.12.2012, 14:06 #2
2)решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main()
{
    int N, K;
    int count = 0;
    std::cout << "Enter N\n";
    std::cin >> N;
    std::cout << "Enter K\n";
    std::cin >> K;
    
    for (int i = K + 1; i < N; ++i) 
    {
        if (N%i == 0)
            count++;
    }
    std::cout << "number of dividers: "<< count << std::endl;
    system("pause");
    return 0;
}
1) минут 10 писал код, который ничего толкового не выдавал. Потом задался вопросом: а такие числа вообще существуют?
Доказал, что их нет. Ни среди положительных, ни среди отрицательных.
Issues
23.12.2012, 14:30
  #3

Не по теме:

SummerRain, только что сделал 1 программу, походу таких чисел реально нет. Или я что то путаю?

SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
23.12.2012, 14:42 #4
дык и я о том же. И мы сейчас по теме говорим. У меня код тоже ничего не выдал, когда перебирал числа.
А потом я на листочке бумаги доказал, что таких чисел нет.

P.S. доказательство выкладывать?
tatyana_12
1 / 1 / 0
Регистрация: 15.12.2012
Сообщений: 29
24.12.2012, 15:38 #5
Выложи, если не сложно

Добавлено через 18 минут
я нашла в интернете
Если честно ничего не поняла..но может кому то поможет разобраться...
Вот такой ответ:
Некоторое число оканчивается на 2. Если же его последнюю цифру переставить на первое место, то число удвоится. Найдите это число.
Ответ: Так как при перенесении цифры 2 на первое место число удваивается, то предпоследняя цифра его должна быть 8 ( 2 х 4 = 8), перед ней 6 ( 8 х 2 = 16), затем 3 (1 + 2 х 6 ) = 13, затем 7 (1 + 2 х 3 = 7) и так далее. Наше число должно начинаться с 1. Поэтому следует остановиться, когда после удвоения цифры и добавления 1 от цифры предыдущего разряда мы получим 1.
Искомое число: 105 263 157 894 736 842
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
24.12.2012, 16:09 #6
вот код который ищет это число среди трёхзначных чисел. И он ничего не выдаёт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    int x;
    for (x = 100; x < 1000; ++x)
    {
        if (x - x / 10 * 10 == 2 && x * 2 == x/10 + 200)
            std::cout << x << endl;
    }
 
    system ("pause");
    return 0;
}
а доказывал я на листочке, переписывать сюда как-то лень.

Добавлено через 17 минут
Цитата Сообщение от tatyana_12 Посмотреть сообщение
Выложи, если не сложно

Добавлено через 18 минут
я нашла в интернете
Если честно ничего не поняла..но может кому то поможет разобраться...
Вот такой ответ:
Некоторое число оканчивается на 2. Если же его последнюю цифру переставить на первое место, то число удвоится. Найдите это число.
Ответ: Так как при перенесении цифры 2 на первое место число удваивается, то предпоследняя цифра его должна быть 8 ( 2 х 4 = 8), перед ней 6 ( 8 х 2 = 16), затем 3 (1 + 2 х 6 ) = 13, затем 7 (1 + 2 х 3 = 7) и так далее. Наше число должно начинаться с 1. Поэтому следует остановиться, когда после удвоения цифры и добавления 1 от цифры предыдущего разряда мы получим 1.
Искомое число: 105 263 157 894 736 842
хм... среди таких больших чисел я не искал.
Сейчас разберёмся
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
24.12.2012, 16:17 #7
Цитата Сообщение от tsvet123 Посмотреть сообщение
последнюю цифру переставить на первое место
Что это означает? Мы число 10002 превратим в 20002 или в 21000?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
24.12.2012, 16:18 #8
10526 21052 * 2 = 2 105 242 104
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
24.12.2012, 16:23 #9
SummerRain, и?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
24.12.2012, 16:27 #10
Цитата Сообщение от HighPredator Посмотреть сообщение
SummerRain, и?
там кто-то сообщение написал с выводом своего числа. Видимо удалил.
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
24.12.2012, 16:37 #11
SummerRain, я про ваше спрашивал. Вы считаете оно подходит под условие задачи?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
24.12.2012, 18:50 #12
вообщем что-то большие числа у меня тупят. использовал long long, __int64.
значит надо немного математики.
число Х1 имеет вид А1 А2 А3 ... Аn 2.
число Х2 имеет вид 2 А1 А2 А3 ... Аn.
Т.е. X1 = A1 * 10^n + A2 * 10^(n-1) + A3 * 10^(n-1) + ... + An * 10 + 2;
X2 = 2 * 10^n + A1 * 10^(n-1) + A2 * 10^(n-1) + A3 * 10^(n-2) + ... + An;
а т.к. Х2 = Х1*2, то 19*10^(n-1)A1 + 19*10^(n-2)A2 + 19*10^(n-3)A3 + ... + 19An = 2 * 10^n - 2*2;

выносим за знак скобок общий множитель 19 и получаем:
19(10^(n-1)A1 + 10^(n-2)A2 + 10^(n-3)A3 + ... + An) = 2 * 10^n - 4;
т.е. число вида 2 * 10^n - 4 должно делиться на 19 без остатка. Осталось всего навсего найти n. а полученое частно от деления и есть наше число.
Естественно, двойку в конце надо прописать.

щас напишу код поиска.

Добавлено через 16 минут
Цитата Сообщение от HighPredator Посмотреть сообщение
SummerRain, я про ваше спрашивал. Вы считаете оно подходит под условие задачи?
а я ещё не предлагал чисел. Я лишь говорил, что их нет. Оказалось, что есть

не знаете, почему этот код не выдаёт ответа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
 
int main()
{
    double n;
    for (n = 1; n < 20; ++n)
    {
        if ((long long int)((pow(10.0, n)) * 2 - 4) % 19 == 0)
            std::cout << n;
    }
    
    system ("pause");
    return 0;
}
при n == 18 получается число кратное 19. На калькуляторе проверял

Добавлено через 1 час 1 минуту
этот код выполняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <math.h>
#include <stdio.h>
 
int main()
{
    long long int x = 100;
    long long int y = x * 2;
    long long int z = x * 10;
    int width=20;   
    for (long long int i = x; i < z; ++i)
    {
        if (i * 2 == i/10 + y)      
            printf("%0*lli", width, i);
    }
    system ("pause");
    return 0;
}
выдаёт 105 (правильно) т.к. условия проверки последней цифры 2 нету.
а вот этот уже нет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <math.h>
#include <stdio.h>
 
int main()
{
    long long int x = 100000000000000000;
    long long int y = x * 2;
    long long int z = x * 10;
    int width=20;   
    for (long long int i = x; i < z; ++i)
    {
        if (i * 2 == i/10 + y)      
            printf("%0*lli", width, i);
    }
    system ("pause");
    return 0;
}
Добавлено через 1 минуту
не хватает производительности компа?
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
24.12.2012, 20:08 #13
SummerRain, не понимаю, что именно вы пытаетесь сделать. Аналитическое решение же приведено. Причем довольно понятно. В коде это выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
using namespace std;
 
int main()
{
    unsigned __int64 digit=2;
    unsigned __int64 step=10;
    unsigned int t=2;
    int prev=0;
    do
    {
        digit=digit+(step*(t*2%10+prev));
        prev=t*2/10;
        t=digit/step;
        step*=10;
    }
    while(!((t==1)&&(prev==0)));
    cout<<digit<<endl;
    getchar();
    return 0;
}
На выходе имеем искомое число.
tatyana_12
1 / 1 / 0
Регистрация: 15.12.2012
Сообщений: 29
25.12.2012, 09:02 #14
Спасибо)

Добавлено через 41 секунду
А если не сложно, можете объяснить код? Просто не очень разобралась
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
25.12.2012, 10:03 #15
всё по тому же решению, что вы привели.
digit - искомое число, которое мы открываем по-одной цифре за шаг.
prev - остаток от деления на 10 удвоенного произведения текущей цифры t.
t - текущая цифра этого в числа.
Т.е. допустим у нас идёт 4 шаг. Мы открыли последние 4 цифры (6842).
digit = 6842, prev = 1 (6*2/10), t = 6 (6842/1000), step = 10000 (1000*10),
получаем следующее число digit = 6842 + (10000 * (6*2%10 + 1)) = 6842 + (10000 * (2 + 1)) = 36842.
и так цикл продолжается до тех пор, пока текущая цифра не окажется равной 1, и предыдущая 0.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 10:03
Привет! Вот еще темы с ответами:

Дано натуральное число. Определить оканчивается ли оно цифрой 7 C++ - C++
1. Дано натуральное число. Определить: -Оканчивается ли оно цифрой 7; -Одинаковы ли его цифры. 2. Определить, имеются ли в массиве...

Определить, на какую цифру, чётную или нечётную, оканчивается число - C++
Сделалано в DEV C++,нужно переделать в NetBeans IDE 1)задание: Дано натуральное число. Определить на какую цифру чётную или нечётную...

Задумано некоторое число - C++
Задумано некоторое число x (x&lt;100). Известны числа k, m, n - остатки от деления этого числа на 3, 5, 7. Найти x Запрещено создавать темы...

Написать программу, которая определяет, оканчивается ли данное целое число цифрой 7 - C++
написать программу, которая определяет, оканчивается ли данное целое число цифрой 7


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.12.2012, 10:03
Ответ Создать тему
Опции темы

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