Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
arreke
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 13
#1

Задача: Необычные цифры - C++

15.09.2012, 14:39. Просмотров 1015. Ответов 5
Метки нет (Все метки)

Описание

В математике имеются такие цифры, которые если умножить в квадрате, то в получившемся результате тоже будет эта цифра. Например: 25x25=625,76x76=5776. Напишите программу, которая определит такая это цифра, или нет.

Input

Вводим любое натуральное цисло.
Проверка будет повторяться пока не будет введена цифра 0.

Output

Вывести строку, которая состоит из 2 частей, первая - результат проверки цифры (Yes or No), вторая - квадрат введённой цифры.

Например, Input:
25↵
11↵
0↵

Output:
Yes 25*25=625↵
No 11*11=121↵

Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
 
int check(int n)
{  
    int n1, n2;
    n1=n; n2=n*n;
    while (n1>0) {
      //printf("%d %d\n", n1%10, n2%10);
      if (n1%10 != n2%10 ) return 0; 
      n1=n1/10; n2=n2/10;
    }
    return 1;  
} 
 
int main() {  
 
  int n;
  
  do {
    scanf("%d", &n); 
    if (n==0) continue; 
    
    if (check(n)==1) printf("Yes  %d*%d=%d\n", n, n, n*n);
    else printf("No  %d*%d=%d\n", n, n, n*n);
 
  } while (n!=0);
  
  return 0;
}
код работает, но не со всеми вариантами теста, на некоторых вариантах выдает не правильный результат.
подскажите, пожалуйста, что не так, или хотябы основные моменты этой задачи на которые надо особо обратить внимание...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2012, 14:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача: Необычные цифры (C++):

Необычные пользовательские интерфейсы - C++
Привет всем. Вот скажите Silverlight ведь не поддерживет C++? И как создать приложение WPF на С++? В VS я создавал только на C#, а на ++...

задача: вывести цифры из матрицы по диагонали - C++
Не могу решить задачу, для профессионалов очень проста: вывести числа из матрицы по диагонали Привожу свой код 1313. К вопросу о...

Задача: делить числа на отдельные цифры - C++
У меня проблема. Имеется такая задача: попросить пользователя ввести 5-ти значное число и напечатать их отдельно цифрами, между цифрами 2...

Задача 56. Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022, - C++
Задача 56. Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9.

Задача( составить программу, которая определяет верно ли что в заданном числе все цифры стоят по возрастанию) - C++
помогите Как составить программу которая определяет верно ли, что в заданном числе все цифры стоят по возрастанию?

Замена последней цифры на значение наименьшей цифры в записи числа N - C++
Ошибка в задании Условие:Дано натуральное число N. Получить новое число М, которое образуется из числа N путем замены последней цифры на...

5
valeriikozlov
Эксперт С++
4672 / 2498 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.09.2012, 15:53 #2
arreke, дайте ссылку на задачу.
На первый взгляд условие нечеткое:

Цитата Сообщение от arreke Посмотреть сообщение
В математике имеются такие цифры, которые если умножить в квадрате, то в получившемся результате тоже будет эта цифра. Например: 25x25=625,76x76=5776.
пишется про цифры, а пример приводят с числами.
И кстати в условии не сказано что начальное число должно быть обязательно в конце полученного числа. Может быть стоит проверять не только в конце.
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.09.2012, 15:59 #3
Есть пример данных, для которых выдаётся неверный ответ? Логика вроде бы в порядке, разве что стоит проверять возврат scanf и, если предполагается обрабатывать отрицательные значения, брать ввод по модулю перед передачей функции. Ну и n2 лучше объявить как long.
0
ober
15.09.2012, 18:25 #4
напсал код, вроде все работает, проверяет не только в конце числа, а везде
ключевые моменты в комментариях:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <math.h>
 
int count_digits(int n)
{
    int cnt = 1; 
 
    while (n /= 10)
        cnt++;
    return cnt;
}
 
/* checks if n2 is contained in the decimal notation of n1 */
int iscontained_in_dec(int n1, int n2) 
{
    int n1_nd = count_digits(n1);
    int n2_nd = count_digits(n2);
 
    int modulo = (int) 
        pow((double) 10, (double) n1_nd - 1);
    int div = (int)
        pow((double) 10, (double) n1_nd - n2_nd);
 
    if (n1_nd < n2_nd)
        return 0;
 
    /* go from left to right */
    while (div > 0) {
        /* divison by div cuts all excess digits from the right */
        if (n2 == n1 / div) 
            return 1;
        n1 %= modulo; /* cut digit from the left */
        modulo /= 10;
        div /= 10;
    }
    return 0;
}
 
int main()
{
    int n = 0;
 
    while (printf("enter n: ") > 0 && scanf("%d", &n) && n)
        printf("square: %d, %s\n", n * n, 
            iscontained_in_dec(n*n, n) ? "yes" : "no");
    return 0;
}
ну и я не стал заморачиваться с типами данных, везде сделал int
и случаи с кривыми входными данными тоже не учел, захотите - сделаете
arreke
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 13
15.09.2012, 19:08  [ТС] #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
arreke, дайте ссылку на задачу.
1. На первый взгляд условие нечеткое: пишется про цифры, а пример приводят с числами.
2. И кстати в условии не сказано что начальное число должно быть обязательно в конце полученного числа. Может быть стоит проверять не только в конце.
Условие на китайском, сам переводил, извиняюсь если где непонятно перевёл

По поводу второго пункта, изменил код, всё равно что то не так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
 
int check(int n)
{  
    char str1[256], str2[246];
    char * pch;
    
    sprintf(str1, "%d", n);
    sprintf(str2, "%d", n*n);
    pch = strstr(str2, str1);
    if (pch) return 1;
    return 0;  
} 
 
int main() {  
 
  int n;
  
  do {
    scanf("%d", &n); 
    if (n==0) continue; 
    
    if (check(n)==1) printf("Yes  %d*%d=%d\n", n, n, n*n);
    else printf("No  %d*%d=%d\n", n, n, n*n);
 
  } while (n!=0);
  
  return 0;
}
Добавлено через 13 минут
Вот скрин с сайта универа, где я проверяю задачу, первый и третий пункт, зелёный, то есть скрипт выдаёт правильный результат, во втором пункте красный, то есть не правильно. http://pic.yupoo.com/908187460/CgJMdJoN/bk90o.jpg. Во втором и третьем пункте вводимые данные не показываются, поэтому не знаю что там происходит и где искать ошибку.

Добавлено через 7 минут
Цитата Сообщение от NoMasters Посмотреть сообщение
Ну и n2 лучше объявить как long.
625×625=390625
90625×90625=8212890625

когда ввожу 625 все правильно, а 90625 уже не может обработать, при умножении слишком большая цифра получается, может в этом дело?
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.09.2012, 19:19 #6
Именно в этом.
0
15.09.2012, 19:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 19:19
Привет! Вот еще темы с ответами:

Даны цифры двух двузначных чисел. Получить цифры суммы - C++
Даны цифры двух двузначных чисел, записываемых в виде а2а1 и b2 b1, где а1 и b1— число единиц, а2 и b2 — число десятков Получить цифры...

Сложить цифры числа (до тех пор, пока не получится сумма из одной цифры) - C++
Всем Доброго времени суток. Первая программа заключается в том что с клавиатуры вводится число например 45644, нужно занести его или в...

Циклы: найти произведение последней цифры и минимальной цифры числа с произведением всех остальных - C++
Помогите, я даже не знаю о чем речь(((( Дано натуральное число n. Найти произведение последней цифры и минимальной цифры этого числа...

Получить число М, которое образуется из числа N путем замены последней цифры на значение наибольшей цифры - C++
Помогите составить программу, пожалуйста! Вот условие: Дано натуральное число N. Получить новое число М, которое образуется из числа...


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

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

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