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

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

Восстановить пароль Регистрация
 
dPeterson
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 4
19.01.2011, 23:12     Удаление пар цифр из числа. #1
Задача написать функцию, которая будет удалять из целого числа рядом стоящие цифры, если их сумма равна 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2011, 23:12     Удаление пар цифр из числа.
Посмотрите здесь:

Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N-1, у которых произведение цифр совпадает с произведением цифр данного числа C++
C++ От данного числа N вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. до тех пор, пока число положительно
Найдите такие натуральные числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7 C++
C++ Найти простые числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа, делилась на 7
C++ дано натуральное число N. Определить,во сколько раз произведение цифр числа больше суммы цифр.Найти количество чётных цифр в записи числа!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
G1m3rr
15 / 14 / 1
Регистрация: 06.03.2010
Сообщений: 30
19.01.2011, 23:27     Удаление пар цифр из числа. #2
23250333
какое число должно остаться, 2333 или 333?
dPeterson
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 4
19.01.2011, 23:47  [ТС]     Удаление пар цифр из числа. #3
Я так понял что операции над числом нужно проводить справа налево, тогда из числа 23250333 останется 2333.

Добавлено через 13 минут
Кто примерно представляет ка сделать, объясните пожалуйста хотя-бы логику!
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.
SashaPinsk
 Аватар для 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;
}
G1m3rr
15 / 14 / 1
Регистрация: 06.03.2010
Сообщений: 30
20.01.2011, 01:45     Удаление пар цифр из числа. #6
Цитата Сообщение от SashaPinsk Посмотреть сообщение
ваша программа работает неправильно.
Работает правильно, но есть недочеты.Так было бы правильнее выразиться.
Однако то, что вы пользуетесь строкой, вот это неправильно, так как строка - есть массив символов, а если вчитаться в задание:
Цитата Сообщение от dPeterson Посмотреть сообщение
Не использовать массивы.
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();
}
SashaPinsk
 Аватар для 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 04:03     Удаление пар цифр из числа.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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();
}
Yandex
Объявления
20.01.2011, 04:03     Удаление пар цифр из числа.
Ответ Создать тему
Опции темы

Текущее время: 07:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru