Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.67
ASTREL
9 / 9 / 4
Регистрация: 07.12.2010
Сообщений: 53
#1

Удалить заданную цифру из числа - C++

07.12.2010, 23:47. Просмотров 7426. Ответов 26
Метки нет (Все метки)

Задание: Напишите программу, которая удалит из введенного числа все цифры равные N (N вводится из клавиатуры), и выведет результат на экран.

Я для примера взял программу которая говорит палиндром ли это число, или нет. Тут я увидел как доставлять цифры в конец числа. Я уже придумал алгоритм решения этой задачи, но если бы знать как доставить цифру наперед числа. Кто знает подскажите как переставлять цифры на перед заданного числа или помогите решить задачу. Спасибо.

Вот программа которую брал за пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <conio.h>
main()
{
      int a,b,copy_a,start;
      start:
      cout<<"Number: ";
      cin>>a;
      copy_a=a;
      b=0;
      while (copy_a!=0)
      {
            b=b*10+copy_a%10;
      copy_a/=10;
      }
      if (a==b) cout<<"Yes"; else cout<<"No";
      getch();
      goto start;
      return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2010, 23:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить заданную цифру из числа (C++):

Удалить заданную цифру из числа
Здравствуйте! В общем есть работающий код для этой программы: #include...

Найти все двузначные числа, имеющие в записи заданную цифру
Найти все двузначные числа, имеющие в записи цифру 3.Заранее спасибо

Напечатать заданную цифру последовательности, в которой выписаны подряд все числа Фибоначчи
Дано натуральное k. Напечатать k-ую ЦИФРУ последовательности 11235813..., в...

Удалить в записи числа цифру, повторяющуюся максимальное число раз
Удаляет в записи числа цифру, повторяющуюся максимальное число раз, получая...

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

Удалить все числа, которые начинаются и заканчиваются на одну и ту же цифру
в одномерном массиве заменить все числа начинаются и заканчиваются на одну и ту...

26
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
07.12.2010, 23:59 #2
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Что-то такое придумал
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
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::vector<int> _num;
    int N = 0, num = 0;
    std::cout << "Enter number: ";
    std::cin >> num;
    std::cout << "Enter N: ";
    std::cin >> N;
 
    while(num)
    {
        int temp = num % 10;
        _num.push_back(temp);
        num /= 10;
    }
 
    for(std::vector<int>::iterator it = _num.begin(); it != _num.end(); ++it)
        if(*it == N)
            _num.erase(it);
 
    std::reverse(_num.begin(), _num.end());
 
    num = 0;
    for(int i = 0; i < _num.size(); ++i)
    {
        num += _num[i];
        num *= 10;
    }
    num /= 10;
 
    std::cout << "\nBefor delete some digit: " << num;
    return 0;
}
1
ASTREL
9 / 9 / 4
Регистрация: 07.12.2010
Сообщений: 53
08.12.2010, 00:12  [ТС] #3
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

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
#include <iostream.h>
#include <windows.h>
main()
{    int c,x;
     int b=0;
     cout<<"Enter number: ";
     cin>>c;
     cout<<"Enter N: ";
     cin>>x;
 
        while(c)
        {
                if(c%10!=x) b=b*10+c%10;
                c/=10;
        }
        while(b)
        {
                c=c*10+b%10;
                b/=10;
        }
        cout<<c<<endl;
        system("pause");
return 0;
}
Спасибо, но я по лени сперва поиском не воспользовался, а аналогичная задача уже была. Но спасибо и за Ваш код, его тоже рассмотрю.
0
Kisunya
0 / 0 / 2
Регистрация: 16.10.2011
Сообщений: 49
21.10.2011, 20:07 #4
А почему эта программа удаляет только посередине стоящее число?
Цитата Сообщение от asics Посмотреть сообщение
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
* * std::vector<int> _num;
* * int N = 0, num = 0;
* * std::cout << "Enter number: ";
* * std::cin >> num;
* * std::cout << "Enter N: ";
* * std::cin >> N;
while(num)
* * {
* * * * int temp = num % 10;
* * * * _num.push_back(temp);
* * * * num /= 10;
* * }
for(std::vector<int>::iterator it = _num.begin(); it != _num.end(); ++it)
* * * * if(*it == N)
* * * * * * _num.erase(it);
std::reverse(_num.begin(), _num.end());
num = 0;
* * for(int i = 0; i < _num.size(); ++i)
* * {
* * * * num += _num[i];
* * * * num *= 10;
* * }
* * num /= 10;
std::cout << "\nBefor delete some digit: " << num;
* * return 0;
}
0
anonimious
13 / 13 / 4
Регистрация: 17.10.2011
Сообщений: 54
21.10.2011, 22:36 #5
А так подойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include <vector>
using namespace std;
void main(){
    setlocale(LC_ALL,"rus"); int a, b, c=0;
    vector <int> mas;
    cout<<"Введите число "; cin>>a;
    cout<<"Введите число, которое нужно убрать "; cin>>b;
    for(int i=0;a!=0;i++)
        {mas.push_back(a%10); a/=10; c++;} cout<<endl;
    for(int i=c-1;i>=0;i--)
        if (mas[i]!=b) cout<<mas[i]; cout<<endl;}
2
Vicky
0 / 0 / 3
Регистрация: 09.11.2011
Сообщений: 56
08.02.2012, 21:25 #6
Можете помочь, то же задание, только на Си?
0
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
08.02.2012, 21:35 #7
А почему бы не забить на числа, а использовать их строковое представление?)
Или это запрещено заданием)
Если нет, то так даже проще)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char input[255];
    char output[255];
    printf("Input number: ");
    scanf("%s", input);
    printf("Input n: ");
    int n;
    scanf("%i", &n);
    int j = 0;
    for( int i = 0; input[i]; i++ )
    {
        if( input[i] != n )
            output[j++] = input[i];
    }
    output[j] = 0;
    printf("Result: %s", output);
Программу не проверял, но должна работать.
0
Mayonez
382 / 274 / 53
Регистрация: 26.12.2009
Сообщений: 875
08.02.2012, 21:55 #8
Цитата Сообщение от asics Посмотреть сообщение
for(std::vector<int>::iterator it = _num.begin(); it != _num.end(); ++it)
if(*it == N)
_num.erase(it);
ой нехорошо это
0
remarkes
303 / 226 / 15
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
08.02.2012, 22:12 #9
Цитата Сообщение от Vicky Посмотреть сообщение
Можете помочь, то же задание, только на Си?
На основе того кода, что гомер написал, но исправленная.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_INPUT 256
 
int main()
{
    char input[MAX_INPUT];
    char output[MAX_INPUT];
    unsigned short n=10; // чтобы число больше 10 не прошло 
    char char_num; 
    int i=0;
    int j=0;
 
    printf("Input number: ");
    scanf("%s", input);
    printf("Input n: ");
    
    while ( n > 9 )
        scanf("%hu", &n);
 
    for( i=0; i < strlen(input); i++ ) {
        char_num=input[i];
        if ( atoi(&char_num) != n ) {
            output[j++]=input[i];
        }
    }
    
    output[j]='\0';
    printf("Result: %s\n", output);
    return 0;
}
1
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
08.02.2012, 22:14 #10
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
for( int i = 0; input[i]; i++ )
* * {
* * * * if( input[i] != n )
* * * * * * output[j++] = input[i];
* * }
xD
Точняк, забыл в число снести)
Пиши так) И не выпендривайся)
C
1
2
3
4
5
for( int i = 0; input[i]; i++ )
{
    if( input[i] - '0' != n )
        output[j++] = input[i];
}
1
remarkes
303 / 226 / 15
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
08.02.2012, 22:24 #11
HomeR_J_SimpsoN,
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
for( int i = 0;
однако, сударь, не тру переменные где попало объявлять.
1
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
08.02.2012, 22:35 #12
Цитата Сообщение от remarkes Посмотреть сообщение
HomeR_J_SimpsoN,

однако, сударь, не тру переменные где попало объявлять.
Спасибо, Сударь, насмешил
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
08.02.2012, 22:53 #13
Объявление переменной-счетчика в операторе for это где попало? Оо
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
09.02.2012, 05:52 #14
Цитата Сообщение от Toshkarik Посмотреть сообщение
Объявление переменной-счетчика в операторе for это где попало?
Если код на С, то да.
1
remarkes
303 / 226 / 15
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
09.02.2012, 07:03 #15
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
printf("Input n: ");
int n;
scanf("%i", &n);
int j = 0;
for( int i = 0;
Цитата Сообщение от Toshkarik Посмотреть сообщение
Объявление переменной-счетчика в операторе for это где попало? Оо
а что "Оо"? да - где попало.

array1.c:35: ошибка: ‘for’ loop initial declarations are only allowed in C99 mode
array1.c:35: замечание: use option -std=c99 or -std=gnu99 to compile your code

то, что 99-й стандарт позволяет так кодить, это не значит, что так надо делать.
0
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 19:47 #16
Цитата Сообщение от remarkes Посмотреть сообщение
а что "Оо"? да - где попало.

array1.c:35: ошибка: ‘for’ loop initial declarations are only allowed in C99 mode
array1.c:35: замечание: use option -std=c99 or -std=gnu99 to compile your code

то, что 99-й стандарт позволяет так кодить, это не значит, что так надо делать.
Интересный у Вас компилятор)
Я вот переменные стараюсь объявлять максимально локально.
Я это нахожу очень удобным и правильным. И это совсем не лукавство)
К тому же я пишу исключительно на плюсах => такая возможность есть => почему бы этим не воспользоваться.
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
09.02.2012, 20:11 #17
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
на плюсах
Цитата Сообщение от Vicky Посмотреть сообщение
только на Си
Отсюда всё и идёт... Но плюсах - бесспорно, так и надо делать. Но 1) ТС просил код на С и 2) вы свой код оформили в тег [C][/C], и никак нельзя было идентифицировать, что код на С++.
0
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 20:13 #18
Да да да) Уже понял) Мордой по столу)
Кстати я действительно не знал о таких вот интересных отличиях меж стандартами)
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
09.02.2012, 20:18 #19
HomeR_J_SimpsoN, разные языки, что вы хотели))
0
HomeR_J_SimpsoN
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 20:19 #20
Эх )
0
09.02.2012, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2012, 20:19
Привет! Вот еще темы с решениями:

Масивы: удалить все числа которые начинаются и заканчиваются на одну и ту же цифру
В одномерном массиве удалить все числа начинаются и заканчиваются на одну и ту...

Как сделать через класс? Дано число. Удалить из числа первую и последнюю цифру
...

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

Дано четырехзначное натуральное число. Удалить из записи этого числа все чётные цифры и цифру 0
Дано четырехзначное натуральное число. Удалить из записи этого числа все...


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

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

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