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


Автор: dimafeng 27.3.2006, 22:06
Как поменять местами цифры в числе?

Например:
есть целочисленное число 1234, нужно получить 4231...

Автор: nworm 27.3.2006, 22:41
Да как угодно. Например, в строку переводить и символы переставлять.

Автор: darkart 27.3.2006, 22:54
Ну к примеру так...
Код

#include<iostream>
#include<conio.h>
using namespace std;
unsigned int Reverse(int num)
{
    unsigned int tmp=0;
    while(num)
    {
        tmp=tmp*10+num%10;//предыдущее число умножаем на 10 и прибавляем посл. цифру числа num
        num/=10;//затираем последнюю цифру числа
    }
    return tmp;
}
int main()
{
    unsigned int num;
    cout<<"Please enter number:\n";
    cin>>num;
    cout<<"Result="<<Reverse(num)<<"\n";
    getch();
    return 0;
}

Автор: Dov 27.3.2006, 23:21
Или так...
Код
#include <iostream.h>
#include <stdlib.h> 
#include <string.h>

int main()    
{
    int num = 1234;
    char str[33];

    cout << (num = atoi(strrev(itoa(num, str, 10)))) << endl;
}

Автор: doomik 28.3.2006, 15:10
У меня было похожое задание в книжке я его решал так:

Код

#include <stdio.h>

main()
{
        int num1, num2, num3, num4, number;
        
            printf("Enter number:\n");
                scanf("%d", &number);
                
                // начало разделения цыфр 

            num1 = number / 1000; // 1
            num2 = number % 1000; // 234
            num3 = number % 100; // 34
            num4 = number % 10; // 4
            
            num2 = num2 / 100; // 2 
            num3 = num3 / 10; // 3

                // конец разделения цыфр
            
            printf("%d%d%d%d", num4, num3, num2, num1); // 4 3 2 1 меняем цыфры местами

            
        

        return 0;
    }

Автор: MAKCim 28.3.2006, 16:38
Цитата

У меня было похожое задание в книжке я его решал так:

впечатляет smile
Добавлено @ 16:39
а если число большое?
изменять программу?

Автор: doomik 28.3.2006, 18:58
Цитата

а если число большое?
изменять программу?

угу,Пришлось бы изменять, я ещё не достиг таких знаний smile

Автор: LuckLess 28.3.2006, 19:58
можешь еще это попробовать
Код

#include <iostream>
#include <algorithm>
#include <sstream>

int replace_digits(int num , int digit1 , int digit2){
    bool is_negative = num<0;
    if (is_negative) num*=-1;

    std::ostringstream ostr;
    ostr << num;

    std::string str = ostr.str();
    if (str.size() >= digit1 && str.size() >= digit2){
        std::swap(str.at(digit1-1),str.at(digit2-1));

        std::istringstream istr(str);
        istr >> num;
    }

    if (is_negative) num*=-1;
    return num;
}

void main(void){
    std::cout << replace_digits(-1699533,2,7);
}

Автор: dimafeng 28.3.2006, 21:31
Всем спасибо, разобрался smile

Автор: Objegog 7.9.2022, 05:47
Модератор: Сообщение скрыто.

Автор: hipAppops 10.9.2022, 03:40
Модератор: Сообщение скрыто.

Автор: anceria 13.9.2022, 05:43
Модератор: Сообщение скрыто.

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