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

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

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

Удаление пар цифр из числа. - C++

19.01.2011, 23:12. Просмотров 1047. Ответов 8
Метки нет (Все метки)

Задача написать функцию, которая будет удалять из целого числа рядом стоящие цифры, если их сумма равна 5. Например из числа 23450333 останется 4333. Не использовать массивы. Я пока додумался как разбить все число на цифры, дальше их надо как-то стравнивать. Помогите?
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
48
49
50
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
 
int main()
{
    int a,b,c,d,e,f,g,h;
    int a1,b2,c3,d4,e5,f6,g7,h8;
    int num;
 
    cout<<"Vvedite 8-znachnoe chislo: ";
    cin>>num;
    cout<<"\nChislo= "<<num;
 
    h=num%10;
    cout<<"\nH="<<h;
    a1=num/10;
 
    g=a1%10;
    cout<<"\nG="<<g;
    b2=a1/10;
 
    f=b2%10;
    cout<<"\nF="<<f;
    c3=b2/10;
 
    e=c3%10;
    cout<<"\nE="<<e;
    d4=c3/10;
 
    d=d4%10;
    cout<<"\nD="<<d;
    e5=d4/10;
 
    c=e5%10;
    cout<<"\nC="<<c;
    f6=e5/10;
 
    b=f6%10;
    cout<<"\nB="<<b;
    g7=f6/10;
 
    a=g7%10;
    cout<<"\nA="<<a;
    h8=g7/10;
 
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2011, 23:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление пар цифр из числа. (C++):

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

Проверить условие: сумма цифр заданного числа N превосходит произведение цифр этого же числа на 1 - C++
Составит линейную логическую программу, печатающую значение 1, если указанное высказывание является истинным, и 0 – в противном случае:...

Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N-1, у которых произведение цифр совпадает с произведением цифр данного числа - C++
Помогите, пожалуйста!!! А то у меня не получается( Написал программу, когда ввожу число 32 как в примере выводит только 16, а 6 и 23 не...

От данного числа N вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. до тех пор, пока число положительно - C++
И опять: сколько можно? Задано натуральное число N. От данного числа вычтем сумму цифр этого числа, от полученного числа опять...

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

Найти простые числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа, делилась на 7 - C++
задание:&quot;найдите простые числа такие, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7&quot; помогите...

8
G1m3rr
15 / 14 / 1
Регистрация: 06.03.2010
Сообщений: 30
19.01.2011, 23:27 #2
23250333
какое число должно остаться, 2333 или 333?
0
dPeterson
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 4
19.01.2011, 23:47  [ТС] #3
Я так понял что операции над числом нужно проводить справа налево, тогда из числа 23250333 останется 2333.

Добавлено через 13 минут
Кто примерно представляет ка сделать, объясните пожалуйста хотя-бы логику!
0
G1m3rr
15 / 14 / 1
Регистрация: 06.03.2010
Сообщений: 30
20.01.2011, 00:28 #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
48
49
50
51
52
53
54
55
#include "stdafx.h"
#include <iostream>
 
long int eliminate(long int n);
 
int _tmain(int argc, _TCHAR* argv[])
{
    long int n;
    std::cout<<"Input your number: ";
    std::cin>>n;
    std::cout<<eliminate(n)<<std::endl;
    std::cin.get();
    return 0;
}
 
long int eliminate(long int n)
{
    long int buf=0,mult=1, nn=n;
    int a=0,b=0, flag=1;
    if(n/10)
    {
        for(int i=0;(n/10)>0;i++)
        {
            a=n%10;
            n=n/10;
            b=n%10;
            if(a+b!=5)
            {
                if(flag)
                {
                    flag=0;
                }
                else
                {
                    mult=mult*10;
                }
                buf=buf+a*mult;
            }
            else
            {
                    n=n/10;
            }
            if(i<1 && !(nn/100) && a+b!=5)
                {
                        mult=mult*10;
                        buf=buf+b*mult;
                }
        }
    }
    else
    {
        buf=n;
    }
    return buf;
}
Учтено: ввод однозначного числа, 2 значного
Нужно дописать: проверку на максимальное число, если вписать число больше чем помещается в лонг инт, прога выдает ответ 0.
1
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
20.01.2011, 01:26 #5
G1m3rr, ваша программа работает неправильно.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
 
long deleteNumeral(long);
 
int main()
{
    long number;    //число, вводимое пользователем
    
    std::cin >> number; //Вводим число
    if(!std::cin.good()) //(с проверкой на ввод)
    {
        std::cerr << "error" << std::endl;
        std::cin.clear();
        std::cin.sync();
        std::cin.get();
        return 0;
    }
    
    number = deleteNumeral(number);
 
    std::cout << number << std::endl;   //Выводим на экран
 
    std::cin.sync();
    std::cin.get();
    return 0;
}
 
long deleteNumeral(long number)
{
    char str[100];  //строка для представления числа
    int i = 0;
    bool signNumber;    //знак числа
 
    if(number < 0)  //Устанавливаем знак числа и делаем его положительным
    {
        number *= -1;
        signNumber = 1;
    }
    else signNumber = 0;
 
    for(long temp = number; temp >= 1; temp /= 10)  //Переводим число в строку
        str[i++] = temp % 10 + '0';     //(в строке оно записано в обр. порядке)
    str[i] = '\0';
    
    for(i = 0; str[i + 1]; ++i) //Заменяем цифры на символ, не явл. цифрой
    {                           //(в данном случае 'a')
        if(str[i] == 'a') continue;
        if((str[i] + str[i + 1] - 2 * '0') == 5)
            str[i] = str[i + 1] = 'a';
    }
    
    double temp;    //Переводим строку обратно в число
    for(i = 0, number = 0, temp = 1; str[i]; ++i, temp *= 10)
        if(str[i] != 'a')
            number += (str[i] - '0') * temp;
        else
            temp /= 10;
 
    if(signNumber) number *= -1;    //Возвращаем знак числу
 
    return number;
}
0
G1m3rr
15 / 14 / 1
Регистрация: 06.03.2010
Сообщений: 30
20.01.2011, 01:45 #6
Цитата Сообщение от SashaPinsk Посмотреть сообщение
ваша программа работает неправильно.
Работает правильно, но есть недочеты.Так было бы правильнее выразиться.
Однако то, что вы пользуетесь строкой, вот это неправильно, так как строка - есть массив символов, а если вчитаться в задание:
Цитата Сообщение от dPeterson Посмотреть сообщение
Не использовать массивы.
0
dPeterson
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 4
20.01.2011, 02:46  [ТС] #7
Есть очень хороший код, удаляет из числа цифры 5 и 0. Первую часть можно вообще не трогать, но нужно наверное ввести еще одну переменную типа n для второго числа и потом их сравнивать и выписывать что осталось по данному алгоритму (уж очень он мне понравился))
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
void main()
{
    int num, i=1, n, nnum=0;
    cout<<"Vvedite 4islo\n";
    cin>>num;
    do
        {
        i=i*10;
        }
    while(num/i!=0);
 
    i=i/10;
        for( ;i!=0 ;i=i/10)
        {
            n=(num/i)%10;
            if(n==0||n==5)
            continue;
            nnum=nnum*10+n;
        }
    cout<<"\n"<<nnum<<"\n";
    getch();
}
0
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
20.01.2011, 03:32 #8
G1m3rr, скорее всё-таки она не правильно работает
dPeterson, что касается этого кода, то в нём ничего нет...
Вот код программы без использования массива:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <cmath>
 
long deleteNumeral(long);
long deleteElement(long number, int position);
 
int main()
{
        long number;    //число, вводимое пользователем
        
        std::cin >> number;     //Вводим число
        if(!std::cin.good()) //(с проверкой на ввод)
        {
                std::cerr << "error" << std::endl;
                std::cin.clear();
                std::cin.sync();
                std::cin.get();
                return 0;
        }
        
        number = deleteNumeral(number);
 
        std::cout << number << std::endl;       //Выводим на экран
 
        std::cin.sync();
        std::cin.get();
        return 0;
}
 
long deleteNumeral(long number)
{
    long temp, figure, figureNext;
    int i;
    bool signNumber;        //знак числа
 
    if(number < 0)  //Устанавливаем знак числа и делаем его положительным
    {
        number *= -1;
        signNumber = 1;
    }
    else signNumber = 0;
 
    for(i = 0, temp = number; temp > 9; ++i, temp /= 10)
    {
        figure = temp % 10; 
        figureNext = temp % 100;
        figureNext /= 10;
        if(figure + figureNext == 5)
        {
            number = deleteElement(number, i);
            --i; temp /= 10;
        }
    }
 
    if(signNumber) number *= -1;    //Возвращаем знак числу
 
    return number;
}
 
long deleteElement(long number, int position)
{
    long temp = static_cast<long>(pow(10., static_cast<double>(position)));
    long rest = number % temp;
    position = position + 2;
    temp = static_cast<long>(pow(10., static_cast<double>(position)));
    number /= temp;
    number *= (temp / 100);
    number += rest;
    return number;
}
1
dPeterson
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 4
20.01.2011, 04:03  [ТС] #9
Я проверил, код отлично работает (по крайней мере версия где надо просто убрать цифры). Новый должен быть примерно таким:
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 "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
void main()
{
        int num, i=1, n, k, nnum=0;
        cout<<"Vvedite 4islo\n";
        cin>>num;
        do
                {
                i=i*10;
                }
        while(num/i!=0); // определили количество знаков (на 1 больше)
 
        i=i/10; // реальное количество знаков
                for( ;i!=0 ;i=i/10) //слева направо начинаем брать по паре цифр
                {
                        n=(num/i)%10;
        k=(num/(i/10))%10;
                        if(n+k==5)
                            nnum=nnum/10; //если пара в сумме дает 5,то убираем правую лишнюю цифру, а слудеющей вообще нет
                            i=i/10; //чтобы в следующем цикле не брать заново ту-же цифру, надо как-то счетчик еще поделить на 10, я не знаю как это правильно сделать
                        continue;
                        nnum=nnum*10+n;
                        nnum=nnum*10+k;
 
                }
        cout<<"\n"<<nnum<<"\n";
        getch();
}
0
20.01.2011, 04:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 04:03
Привет! Вот еще темы с ответами:

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

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

Рекурсия: количество цифр в числе, сумма цифр и реверс числа - C++
Вот задание: Написать программу, которая запрашивает у пользователя целое число, на экран выводит сколько цифр в числе, их сумму и...

Функция вычисляющая количество цифр числа и сумму этих цифр - C++
Не могу найти ошибку. Помогите пожалуйста. Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и...


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

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

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