Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как разделить цифры?


Автор: toader 26.6.2009, 14:22
как разделить цифры? вот к примеру если вёл 101101 то чтобы он их записал не как одно а как 6 разных?

Автор: Andrew121 26.6.2009, 14:41
toader, Читаешь по одной, и разделяешь чем вздумается.

Автор: ИванМ 26.6.2009, 16:37
Если вводится строка char* то просто через оператор[] и функцию atoi. Если вводится число, то легче всего сначала преобразовть в строку, а потом как в первом случае.

Автор: jonie 26.6.2009, 18:01
Цитата
Если вводится число, то легче всего сначала преобразовть в строку, а потом как в первом случае.

проще?!
Код

while(n) {
 char c = (n%10) & 0xFF;
 n/=10;
}
сложно ли?

Автор: zim22 26.6.2009, 18:19
Цитата(toader @  26.6.2009,  14:22 Найти цитируемый пост)
как разделить цифры?

определите для начала количество цифр в числе по формуле: log(number) / log(10) + 1
далее для вычленения каждой цифры используйте операции / и %

Автор: toader 29.6.2009, 10:23
ухмм.. вот примеру как сделать эту операцию если я вёл 12345 чтобы он дал результат на 1+2+3+4+5?

Автор: toader 29.6.2009, 11:01

вот я нашол такое.. 5! = 5 * 4 * 3 * 2 * 1 = 120
но мне нужно вот так 12345! = 1 * 2 * 3 * 4 * 5 = 120

Автор: Gordon 29.6.2009, 11:12
Код

int n = 0;
    int result[9] = {0, 0, 0, 0, 0, 0, 0, 0};
    
    cin >> n;

    int tmp = 0;
    int i = 0;

    while(n > 10)
    {
        tmp = n % 10;
        result[i] = tmp;
        n /= 10; 
        i++;
    }
    
    result[i] = n;

    //Все, теперь в массиве твое число, индекс - номер разряда 
    //(или как там наызывается, не помню уже)

    while(i >= 0)
    {
        cout << result[i] << " ";
        i--;
    }
    
    cout << endl;



Только вместо вывода на экран, нужно перемножить... Вроде то что тебе нужно... 
p.s. Только 12345! никак не 120! ))))

Автор: toader 29.6.2009, 11:16
Цитата(Gordon @ 29.6.2009,  11:12)
p.s. Только 12345! никак не 120! ))))

 smile 1*2*3*4*5=
1*2=2
2*3=6
6*4=24
24*5=120

smile

Добавлено через 7 минут и 55 секунд
вот я чучуть изменил, но не получается настроить как мне надо как сделать чтобы он показал лиши операцию и результат? 


Код

int main ()
{
int n = 0;
    int result[9] = {0, 0, 0, 0, 0, 0, 0, 0};

    cin >> n;

    int tmp = 0;
    int i = 0;

    while(n > 10)
    {
        tmp = n % 10;
        result[i] = tmp;
        n /= 10;
        i++;
    }

    result[i] = n;

    while(i >= 0)
    {
        cout << result[i] << " ";
        i--;
        cout << result[0]*result[1]*result[2]*result[3]*result[4] << endl;
    }

    cout << endl;
    }


Код

Console:
12345
1 120
2 120
3 120
4 120
5 120

Автор: toader 29.6.2009, 11:35
аха вот понял.. только он повторяет это 5 рас как убрать?

Код

       cout << result[0] << " * " << result[1] << " * " << result[2] << " * " << result[3] << " * " << result[4] << " = " << result[0]*result[1]*result[2]*result[3]*result[4] << endl;


//Console:
//12345
//1 5 * 4 * 3 * 2 * 1 = 120
//2 5 * 4 * 3 * 2 * 1 = 120
//3 5 * 4 * 3 * 2 * 1 = 120
//4 5 * 4 * 3 * 2 * 1 = 120
//5 5 * 4 * 3 * 2 * 1 = 120

Автор: Gordon 29.6.2009, 11:56
Вместо 
Код

while(i >= 0)
    {
        cout << result[i] << " ";
        i--;
        cout << result[0]*result[1]*result[2]*result[3]*result[4] << endl;
    }


напиши

Код

while(i >= 0)
    {
        cout << result[i] << " ";
        i--;
    }

    cout << "= " << result[0]*result[1]*result[2]*result[3]*result[4] << endl;


p.s. 1*2*3*4*5 = 120, но 12345! не равно 120, 120 - это 5!...

Автор: toader 29.6.2009, 12:24
Цитата(Gordon @ 29.6.2009,  11:56)
p.s. 1*2*3*4*5 = 120, но 12345! не равно 120, 120 - это 5!...

ка как сделать это чтобы работало не только для 5 цифр а и для меньше или больше?


Код

 cout << "= " << result[0]*result[1]*result[2]*result[3]*result[4] << endl;

Автор: Gordon 29.6.2009, 12:57
Код

double p = 1.0;
    while(i >= 0)
    {
        cout << result[i] << " ";
        p *= result[i];
        i--;
    }

    cout << "= " << p << endl;

Автор: toader 29.6.2009, 13:04
Цитата(Gordon @ 29.6.2009,  12:57)
Код

double p = 1.0;
    while(i >= 0)
    {
        cout << result[i] << " ";
        p *= result[i];
        i--;
    }

    cout << "= " << p << endl;

щтота не то(( 



Код

5 4 3 2 1 = 1

Автор: Gordon 29.6.2009, 13:24
У меня все правильно работает, может ты что напутал в коде...
Вот полный вариант:

Код

int n = 0;
    int result[9] = {0, 0, 0, 0, 0, 0, 0, 0};
    
    cin >> n;

    int tmp = 0;
    int i = 0;

    while(n > 10)
    {
        tmp = n % 10;
        result[i] = tmp;
        n /= 10; 
        i++;
    }
    
    result[i] = n;

    //Все, теперь в массиве твое число, индекс - номер разряда 
    //(или как там наызывается, не помню уже)

    double p = 1.0;
    while(i >= 0)
    {
        cout << result[i] << " ";
        p *= result[i];
        i--;
    }

    cout << "= " << p << endl;

Автор: toader 29.6.2009, 13:33
о да всё работает.. большое спасибо))) сейчас попробую из него сделать свою задачу)

Добавлено @ 13:39
чёт я запутался(( мне надо вот так сделать

If  result[1] > 0  then result[1]=2
If  result[2] > 0  then result[2]=3
If  result[3] > 0  then result[3]=4
....

Автор: Gordon 29.6.2009, 13:55
Честно говоря, я немного не понял что теле нужно... Лучше напиши словами что требуется.

If  result[1] > 0  then result[1]=2
If  result[2] > 0  then result[2]=3
If  result[3] > 0  then result[3]=4

Код


if(result[1] > 0) result[1] = 2;
if(result[2] > 0) result[2] = 3;
if(result[3] > 0) result[3] = 4;
...


Только если ты хочешь с первого элемента начать, то надо писать "result[0]"

Автор: toader 29.6.2009, 14:06
Цитата(Gordon @ 29.6.2009,  13:55)
Честно говоря, я немного не понял что теле нужно... Лучше напиши словами что требуется.


Только если ты хочешь с первого элемента начать, то надо писать "result[0]"

извини я сам не-знаю)) я по кусочку спрашиваю чтобы понять что как работает ^^

я это калькулятор бинари должен сделать) вот теперь получилось 8 цыфар как по маслу а теперь сказали что надо for использовать чтобы можно было больше цифр(

Автор: Gordon 29.6.2009, 14:13
Цитата(toader @  29.6.2009,  14:06 Найти цитируемый пост)
первый елемент всегда 1 ))


Т.е.? Первый элемент в массиве (в языке С) всегда имеет индекс "0", или тебе нежно первому элементу всегда задавать значение "1"?

Автор: toader 29.6.2009, 14:14
ну я исправил... просто у меня привычка всегда начинать с 1 ^^ но уже исправил чтобы правелино было)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)