Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
1

Переставить первую и последние цифры

06.01.2011, 23:40. Показов 2477. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Пробывал решить такую задачу:Дано натуральное число. Переставить его первую и последние цифры.
вот мой код:
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
#include<stdio.h>
#include<conio.h>
 
 
main()
{int i, n=0, ost=0, k=0, per1=0;
int M=9;
int flag=0;
int mass[M];
      printf("Enter n->");
      scanf("%d", & n);//Считываем число n
k=n;
while(1)//Бесконечный цикл с помощью которого узнаем количество цифр
{ost=k%10;
k=k/10;
flag++;
if(ost==0) break; 
}
M=flag-1;//присваеваем М количество элементов массива
 
    
for(i=0; i<M; i++)//разбиваем число n и переводим его в массив
{mass[i]=n%10;
n=n/10;
printf("%d", mass[i]);
}      
 
 
for(i=0; i<M; i++){//выводим элементы массива
printf("\nMass[%d]=%d",i, mass[i]);}
 
 
 printf("\nKol-vo zifr=%d", M);//Выводим количество цифр
 
       getch();}
у меня всего два вопроса:
1) массив почему то присваевае число n слева на право. (т.е было число 345 а в массиве стало 543). Как мне это исправить?
2)Как мне поменять первый и последний элемент массива? Вот так mass[0]=mass[M]-не получается
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2011, 23:40
Ответы с готовыми решениями:

Переставить первую и последнюю цифры числа n
Доброго времени суток! Дано натуральное число n. Нужно переставить первую и последнюю цифры числа...

Переставить первую и последнюю цифры числа с помощью цикла
Дано целое положительное N. Получить число, в котором переставлены первая и последняя цифры числа N.

Переставить местами последние цифры двузначных чисел
Даны два целых двухзначных числа. Переставить местами последние цифры чисел. Например, даны числа...

Переставить первую и последнюю цифры числа
Условие задачи: Дано натуральное число n. Переставить первую и последнюю цифры числа n. Не могу...

25
38 / 38 / 17
Регистрация: 15.12.2010
Сообщений: 110
07.01.2011, 00:10 2
просто по логике посудите, от числа отделили последнюю цифру и занесли в 0 ячейку массива--число в массиве идет с конца))
C
1
2
3
4
5
6
for(i=M; i>0; i--)//разбиваем число n и переводим его в массив//притом последнюю цифру в последнюю ячейку
{mass[i]=n%10;
n=n/10;}
for(i=1; i<=M; i++){//ну а тут выводим в обратном порядке
printf("%d", mass[i]);
}
мож так вывод сделать (лишний код)

по второму могу сказать одно--вводи временную переменную для "обмена"
P.S. сорри за корявое объяснение....
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 00:40  [ТС] 3
так как вы сказали не получается- он тогда массив левыми числами заполняет((
0
26 / 25 / 10
Регистрация: 26.11.2010
Сообщений: 57
07.01.2011, 00:46 4
Цитата Сообщение от eczo Посмотреть сообщение
C++
1
2
3
4
5
for(i=M; i>0; i--)//разбиваем число n и переводим его в массив
//притом последнюю цифру в последнюю ячейку 
{mass[i]=n%10; n=n/10;} 
for(i=1; i<=M; i++)//ну а тут выводим в обратном порядке
{ printf("%d", mass[i]); }
C++
1
2
3
4
5
for(i=M-1; i>=0; i--)//разбиваем число n и переводим его в массив//притом последнюю цифру в последнюю ячейку
{mass[i]=n%10;
n=n/10;}
for(i=0; i<M; i++){//ну а тут выводим в обратном порядке
printf("%d", mass[i]);
Попробуй так(Нумерация в массиве начинается с 0 и заканчивается m-1, где m - кол-во элементов в массиве)
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 00:49  [ТС] 5
по логике условие может и поавильно... но почему то оно не работает- я раньше так пробывал

Добавлено через 2 минуты
Voroxвсе равно в обратном порядке выводит....
0
26 / 25 / 10
Регистрация: 26.11.2010
Сообщений: 57
07.01.2011, 00:57 6
Цитата Сообщение от Mogul-kan Посмотреть сообщение
Voroxвсе равно в обратном порядке выводит....
Это для избавления от левых чисел)
А по простому создай 2-ой массив такой же длины и перепиши в него 1-ый массив наоборот. Примерно так:
C++
1
2
3
4
5
6
7
int m2[M];
int j=M-1;
for(int i=0;i<M;i++)
{
 m2[j]=mass[i];
 j--;
}
ну и вывод массива m2
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 00:59  [ТС] 7
а как мне вывести числа в массиве в нормальном порядке?
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
07.01.2011, 01:04 8
Как-то длинновато, но без масива
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
#include <stdio.h>
 
int reverse_n(int n)
{
    int _n = n;
    n = 0;
 
    while(_n)
    {
        n += _n % 10;
        n *= 10;
        _n /= 10;
    }
    n /= 10;
 
    return n;
}
 
int main(void)
{
    int n, _n, cnt = 0;
    printf("\n\nInput num -> ");
    scanf("%d", &n);
 
    _n = 0;
    while(n)
    {
        _n += n % 10;
        _n *= 10;
        ++cnt;
        n /=10;
    }
    _n /= 10;
 
    n = 0;
    int f_d, l_d;
    for(size_t i = 0; i < cnt; ++i)
    {
        if(!i)
        {
           f_d = _n % 10;
            _n /= 10;
            continue;
        }
        else if(i == cnt - 1)
        {
            l_d = _n % 10;
            _n /= 10;
            continue;
        }
 
        n += _n % 10;
        n *= 10;
        _n /= 10;
    }
    n += f_d;
 
    _n = reverse_n(n);
    _n *= 10;
    _n += l_d;
    n = reverse_n(_n);
 
    printf("%d", n);
    return 0;
}
0
26 / 25 / 10
Регистрация: 26.11.2010
Сообщений: 57
07.01.2011, 01:04 9
Цитата Сообщение от eczo Посмотреть сообщение
по второму могу сказать одно--вводи временную переменную для "обмена"
Как товарищ выше предлагал:
C++
1
2
3
4
5
6
7
8
int j=M-1;
for(int i=0;i<M;i++)
{
int tmp=mass[i];
mass[i]=mass[j];
mass[j]=tmp;
j--;
}
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 01:18  [ТС] 10
Цитата Сообщение от Vorox Посмотреть сообщение
int j=M-1; for(int i=0;i<M;i++) { int tmp=mass[i]; mass[i]=mass[j]; mass[j]=tmp; j--; }
А можно прокоментировать мне этот код- не совсем понял как оно работает
1
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
07.01.2011, 01:38 11
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
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
void swap(char& a, char& b)
{
    char Tmp = a;
    a = b; 
    b = Tmp;
}
 
int main()
{
    int n; 
    char buf[10];
    cout << "Enter the number\n";
    cin >> n;
    itoa(n, buf, 10);
    swap(buf[0], buf[strlen(buf) - 1]);
    n = atoi(buf);
    cout << endl << n;
    _getch();
    return EXIT_SUCCESS;
}
а так не проще ли будет?
1
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
07.01.2011, 02:33 12
можно сделать все просто перевсти числов в строку и поменять a[0 ] элемент строки с a[strlen]и все тут
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,961
07.01.2011, 03:03 13
Mogul-kan, опять скажете, что сложно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cmath>
 
int main(){
    int num;
 
    while ( std::cout << "Number: " && std::cin >> num && num > 0 ){
        int last = num % 10;
        int pwr = static_cast<int>(pow(10.0, floor(log10(static_cast<double>(num)))));
        int first = num / pwr;
        std::cout << "Result: " << ( num - last - first * pwr + first + last * pwr ) << std::endl;
    }
 
    return 0;
}
1
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
07.01.2011, 12:50 14
Цитата Сообщение от sergeu90 Посмотреть сообщение
можно сделать все просто перевсти числов в строку и поменять a[0 ] элемент строки с a[strlen]и все тут
тогда 0 всегда получаться будет ведь a[strlen(a)] = '\n'
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 16:40  [ТС] 15
итак начну по порядку easybudda , спасибо вам за старания, я просмотрел ваш код- он всто раз легче, но к сожалению работает не совсем корректно: внизу будет скриншот работы программы.
sandye51- ваш код работает прекрастно, но мне как новичку многое не понятно- я пишу на си(и программу мне предется переводить на си). Не судите строго я все только начинаю осваивать, прокоментируйте пожалуйста вашу программу чтобы я разобрался что к чему
Миниатюры
Переставить первую и последние цифры  
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
07.01.2011, 16:59 16
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 <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
void swap(char& a, char& b) // меняет 2 элемента местами;
{
    char Tmp = a;
    a = b; 
    b = Tmp;
}
 
int main()
{
    int n; // создаем переменную, где будет хранится наше число;
    char buf[10]; // создаем массив типа char для перевода нашего числа в строку;
    cout << "Enter the number\n"; // запрос на ввод числа;
    cin >> n;    // вводим наше число;
    itoa(n, buf, 10); // переподим наше число в строку, аргументами функции является наше число(n), ;
    // массив типа char, в который запишется наше число (buf), система счисления, в которой наше число будет представлено в строке (10);
    swap(buf[0], buf[strlen(buf) - 1]); // вызываем функцию, которая меняет последний значащий символ в нашей строке и первый;
    n = atoi(buf); // теперь необходимо обратно перевести строку, где записано полученное наше число, в строку;
    // аргументом функции является массив типа char, где записанно наше число, а возвращаемое значение - наше число;
    cout << endl << n; // выводим полученное число;
    _getch(); // ждем нажатия любой клавиши (нужно, чтобы окно консоли не закрывалось сразу);
    return EXIT_SUCCESS; // возвращаем код успешного завершения программы;
}
надеюсь все понятно
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 17:05  [ТС] 17
Просто я пришел сюда не для того чтобы за меня сделали программу. а потому что я хочу научиться ее сделать, научиться чему то новому, разобраться в вашем коде и понять то чего я еще не знаю... Пожалуйста кто нибудь прокоментируйте код многоуважаемого sandye51

Добавлено через 27 секунд
жесть! спасибо
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,961
07.01.2011, 17:08 18
Цитата Сообщение от Mogul-kan Посмотреть сообщение
easybudda , спасибо вам за старания, я просмотрел ваш код- он всто раз легче, но к сожалению работает не совсем корректно: внизу будет скриншот работы программы.
А у меня нормально всё работает...
Переставить первую и последние цифры

Да и вообще, у меня, видите ли, привычка проверять код перед тем, как выкладывать. Может нужно было скопировать и проверить, а не "просмотреть" и чего-то не заметить?
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
07.01.2011, 17:20  [ТС] 19
код я копировал и смотрел на своем компиляторе dev-c++, во всяком случае у меня программа работала как на скриншоте что я присылал выше.
у меня коду родились такие вопросы

Цитата Сообщение от sandye51 Посмотреть сообщение
itoa(n, buf, 10);
итак мы переводим число n в строку а зачем дальше приписали buf, 10
и
Цитата Сообщение от sandye51 Посмотреть сообщение
swap(buf[0], buf[strlen(buf) - 1]);
функция swap меняет местами два аргумента: 1-это нулевой элемент массива buf. а второй там не совсем понятно...
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
07.01.2011, 17:28 20
мое предыдущее сообщение дает исчерпывающий комментарий к программе, прочитайте внимательно и найдете там ответы на ваши вопросы
1
07.01.2011, 17:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2011, 17:28
Помогаю со студенческими работами здесь

Переставить первую и последнюю цифры числа
Дано натуральное число n, переставить первую и последнюю цифры числа.Если число n&lt;10,то вывести...

Переставить первую и последнюю цифры числа n
Дано натуральное число n, переставить первую и последнюю цифры числа n. C#

Переставить первую последнюю цифры числа
-------------------------------------------------------------------------------- надо решить...

Переставить первую и последнюю цифры числа л
Написал код: пишет деление на 0. Как исправить? import math print(&quot;Задание 88(b) &quot;) n =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru