Числа, Которые Совпадают С Последними Цифрами Своих Квадратов

Тема в разделе "C/C++/C#", создана пользователем kisslata, 21 ноя 2012.

  1. kisslata

    kisslata New Member

    Регистрация:
    15 ноя 2012
    Сообщения:
    2
    Симпатии:
    0
    У меня есть код программы, которая на промежутке [1..n] вычисляет числа, которые совпадают с последними цифрами своих квадратов (5^2=25, 25^2=625), но тут n вводится с клавиатуры. Помогите поправить, чтобы n изначально был 1000. То есть, чтобы программа сразу считала на промежутке [1..1000]. С++


    #include <iostream>

    int GetOrder (int n)
    {
    int res = 1;
    while (n > 0)
    {
    n /= 10;
    res *= 10;
    }
    return res;
    }

    int main()
    {
    setlocale (LC_ALL, ".1251");
    int i, n;
    long long d;

    std::cout << "Введите число\n";
    std::cin >> n;

    i = 1;

    std::cout << std::endl;

    while (i <= n)
    {
    d = i * i;
    if (i == d % GetOrder (i))
    std::cout << i << std::endl;
    i++;
    }

    return 0;
    }
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    вот по быстрому набросал

    конечно же кучу ифов в конце цикла
    надо заменить чем то более красивым
    Код (C++):
    //
    #include    <iostream>
    #include    <math.h>
    void main()
    {
    int n;
    std::cout<<"Inuput:";
    std::cin>>n;
    float i(1);
    int k=1;
    while(i<=n)
    {
    if ((((int)pow(i,2)) % ((int)pow(10.,k))) == i)
    std::cout<<i<<"=>"<<pow(i,2)<<"\n";
    i++;
    if(i==11)                 k=2;
    if(i==101)   k=3;
    if(i==1001)  k=4;
    if(i==10001)          k=5;
    }
    }
    //
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    в этом случае Pow работает гораздо дольше чем i*i. Гора-а-здо дольше, т.к. оно возводит в дробную степень число с плавающей точкой, а это охренеть какая трудоемкая операция пос равнению в умножением двух целых чисел. Насколько трудоемкая, что о затратах на вызов функции речи не идет.

    подход к задаче зато зачетный ) я бы особо не парился, числа писал в stringstream, считывал строки, получал последний символ, получал цифру и уже потом в степень возводил...работало бы это гора-а-здо дольше вашего кода. И думаю, даже ваше pow меня не спасло ).
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    ну да заменить стоит на умножение)
    может есть какие идеи на счёт последних ифов?как одним условием заменить?
     
  5. kisslata

    kisslata New Member

    Регистрация:
    15 ноя 2012
    Сообщения:
    2
    Симпатии:
    0
    ребятки, а как сделать, чтобы n не вводить? а при запуске программы, чтобы сразу выводило список:
    "25 625
    76 5776
    376 141376
    625 390625"
     
  6. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    по этой фразе становится понятно что и предыдущий код не ваш)
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    оно и раньше было понятно ) ТС оставалось лишь 1 цикл дописать (а посмотри сколько он там всего написал...)
     
  8. kisslata

    kisslata New Member

    Регистрация:
    15 ноя 2012
    Сообщения:
    2
    Симпатии:
    0
    ну так и есть) я ж не сказала, что код мой. я сказала, что у меня есть код :D
     
Загрузка...
Похожие Темы - Числа Которые Совпадают
  1. areostar
    Ответов:
    0
    Просмотров:
    358
  2. Bisyara
    Ответов:
    0
    Просмотров:
    953
  3. mel
    Ответов:
    3
    Просмотров:
    1.361
  4. GoldenYear
    Ответов:
    0
    Просмотров:
    1.166
  5. Untiy16
    Ответов:
    0
    Просмотров:
    1.368

Поделиться этой страницей