Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Jumper19
13 / 13 / 4
Регистрация: 27.12.2010
Сообщений: 83
#1

разделить число на 2 части - C++

23.06.2011, 22:28. Просмотров 5594. Ответов 35
Метки нет (Все метки)

как разделить число на 2 части
вот у меня есть число в int :
445219

Я точно знаю что у меня с 6 чисел... и как мне разделить их в 2 int по 3 числа
ну чтобы типа вот так:
C++
1
2
3
4
int x=445219
 
y=445
z=219
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 22:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос разделить число на 2 части (C++):

Разделить число m на две части, разность которых равна 5
Разделить число m на две части, разность которых равна 5. Помогите с кодом...

Разделить дробное число на 2 части: целая часть числа и его дробная часть
Пользователь вводит с клавиатуры сумму в валюте (дробное число). Вывести по...

Разделить строку на части
Доброго времени суток. Имеется строка: char *pBuf=new char; заполняется...

Разделить массив на 4 части
Прошу прощения за глупую просьбу, подскажите пожалуйста как разбить массив...

C++ разделить исходник на части
вопрос новичка посоветуйте, как это можно сделать (ни разу не делал) есть...

Разделить массив на две части
Помогите решить адачку очень срочно надо Разделить массив на две части,...

35
JeyKip
53 / 45 / 16
Регистрация: 23.06.2011
Сообщений: 122
23.06.2011, 22:55 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    int a,b,c;
    c=455234;
           //т.к. присваивается в int, то остаток автоматом отбрасывается
    a = c/1000;
           //просто берешь остаток от деления. Получается вторая часть 6-значного числа
    b = c%1000;
    cout<<"a = "<<a<<"\nb = "<<b<<"\n";
    getch();
}
0
Jumper19
13 / 13 / 4
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:07  [ТС] #3
ладно так у меня не проканало...
возможно ли char переобразовать в int?
ну типа в char есть чило 219 нужно его записать в int
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
23.06.2011, 23:11 #4
Тот же вариант, что и выше, только с использованием функции.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a,b,c;
    div_t ab;
    c = 455234;
    ab = div(c, 1000);
    a = ab.quot;
    b = ab.rem;
    printf("a = %d\nb = %d\n", a, b);
    return 0;
}
Цитата Сообщение от Jumper19 Посмотреть сообщение
ладно так у меня не проканало...
Почему не проканало?

Цитата Сообщение от Jumper19 Посмотреть сообщение
возможно ли char переобразовать в int?
ну типа в char есть число 219 нужно его записать в int
Бери да записывай. Или под char понимается строка?
0
Jumper19
13 / 13 / 4
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:23  [ТС] #5
char типа как массив
char x[100]
и каждый елемент массива 1 символ
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
23.06.2011, 23:29 #6
Ну то есть строка, скорее всего.
Тогда atoi в помощь.
C
1
int c = atoi("219");
Добавлено через 2 минуты
правда null-terminated строка отличается от просто массива символов тем, что данные завершаются символом '\0'
0
Jumper19
13 / 13 / 4
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:58  [ТС] #7
блин чтото ничего не получается!
помогите мне решить:
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
24.06.2011, 02:16 #8
дык если за тебя решат, в чём понт?

пс: char[] тут нафиг не нужен, к тому же указано гарантированно количество цифр (6)

в функцию передаешь 2 числа (val/1000,val%1000);
возвращаешь bool

в функции стандартно разбераешь число по цифрам и суммируешь.
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
24.06.2011, 04:24 #9
OstapBender, на самом деле можно и char[] заиспользовать. Мне вот что-то интересно стало, что использовали составители программ короче 180 символов?
Чёт бился-бился, а так и не удалось ужать короче 212 непробельных символов, так чтобы программа оставалась синтаксически корректной. Да и то ценой неуказания типа main, на что GCC выдаёт предупреждение. А так и вовсе 215 получится. Эх...

Добавлено через 6 минут
Хотя вот заголовок cstdio при подключённом fstream оказался не нужен. Не знаю, можно ли на это рассчитывать. Но теперь получается 196 (199).
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.06.2011, 07:39 #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
OstapBender, на самом деле можно и char[] заиспользовать. Мне вот что-то интересно стало, что использовали составители программ короче 180 символов?
Чёт бился-бился, а так и не удалось ужать короче 212 непробельных символов, так чтобы программа оставалась синтаксически корректной. Да и то ценой неуказания типа main, на что GCC выдаёт предупреждение. А так и вовсе 215 получится. Эх...

Добавлено через 6 минут
Хотя вот заголовок cstdio при подключённом fstream оказался не нужен. Не знаю, можно ли на это рассчитывать. Но теперь получается 196 (199).
А я попал в топ =) Только выдирать свое решение из топа не стал, тем более что понятно в нем чуть более, чем ничего. Вот первоначальный вариант, нашел на убитом разделе с виндой, писал месяца 3 назад =)
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
#include <iostream>
using namespace std;
main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int a,b,c,d,i,r1,l1,r2,l2,j;
    cin >> b;
    for (j = 0; j < b; j++) {
        cin >> a;
        c=a;
        a++;
        r1=0;
        for (i = 0; i < 3; i++)  {
            d=a%10;
            a/=10;
            r1+=d;
        }
        l1=0;
        for (i = 0; i < 3; i++) {
            d=a%10;
            a/=10;
            l1+=d;
        }
        c--;
        r2=0;
        for (i = 0; i < 3; i++)  {
            d=c%10;
            c/=10;
            r2+=d;
        }
        l2=0;
        for (i = 0; i < 3; i++) {
            d=c%10;
            c/=10;
            l2+=d;
 
        }
        if ((l1==r1)||(l2==r2)) cout << "Yes" << endl; else cout << "No" << endl;
    }
 
    return 0;
 
}
P.S. Но как меньше 180 символов сделать - для меня тоже загадка. Лунев вообще читер, он почти во всех задачах топ1.

Добавлено через 1 час 24 минуты
Впрочем, у меня только 3е место (204 символа), поэтому выкладываю. Просьба не сдавать этот исходник =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
#define x(z) for ( i = l = r = 0; z; z /= 10)     (i++ < 3  ? r : l) += z % 10;
int c, a,  l, r, i;
main(){
    std::fstream v("input.txt");
    std::ofstream o("output.txt");
    for (v >> c; v >> a; o << (l == r?"Yes ":"No ")){
        c = a--+1;
        x(c)
        if ( l != r) x(a)
    }
}
Добавлено через 4 минуты
Впрочем, я еще на 5 символов сжал (теперь 199), так что можете сдавать, только это останется на вашей совести =)
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
24.06.2011, 14:07 #11
Расскажите как у вас там символы считаются? А то мне интересно стало, на 190 (с пробелами и пр.) написал))
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
24.06.2011, 14:11 #12
А просто выкидываются абсолютно все пробелы и переводы строки, если я правильно понял
190 с пробелами — это круто. Ты тоже читер! Моя без пробелов только 195 смог.
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.06.2011, 14:11 #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
Расскажите как у вас там символы считаются? А то мне интересно стало, на 190 (с пробелами и пр.) написал))
Просто все символы с учетом комментариев и без учета пробелов, символов табуляции и ентеров.
P.S. вы оба читеры, я только до 199 догнал, при этом использовал дикий быдлокод... Зарегайтесь и киньте туда срр файл. А то ведь еще не факт, что правильно решили =)
0
Jumper19
13 / 13 / 4
Регистрация: 27.12.2010
Сообщений: 83
24.06.2011, 14:21  [ТС] #14
спасибо,
да мне не главное сдать было а разобраться...

еще раз спасибо
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
24.06.2011, 14:26 #15

Не по теме:

А там вот когда задачу сдаешь, написанно Waiting, это на долго? А то я минуты 3-4 уже Waiting ))



Добавлено через 4 минуты

Не по теме:

Дождался, написали "Товарисч, вы тупанули с выводом"

0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
24.06.2011, 14:51 #16
185 вместе с пробелами
C
1
2
3
4
5
6
7
#include <stdio.h>
int main(void){
    char s[7] = {0};
    while ( scanf("%6s", s) == 1 )
        printf("%s\n", ( abs((s[3]+s[4]+s[5])-(s[0]+s[1]+s[2])) == 1 ) ? "YES" : "NO");
    return 0;
}
запускать
Код
prog < input.txt > output.txt
только первое число (количество тестов) из входного файла надо выкинуть, оно там ни за чем...
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
24.06.2011, 14:56 #17
easybudda, во-первых, читать и писать с перенаправлением — это не спортивно. Там нет возможности влиять на запуск.
Во-вторых, разве эта программа решает поставленную задачу? (определить является ли счастливым следующий или предыдущий). Я запускать не пробовал

А тем временем мой код на 195 прошёл...
0
diagon
24.06.2011, 14:59
  #18

Не по теме:


easybudda, если б все так просто было... Нужно считать число, увеличить его, проверить, уменьшить на 2, проверить, и лишь затем выводить =) И ввод-вывод обязательно должен был из input.txt в outpu.txt + ответы должны разделятся, а не идти слитно.
И таки я уже на 4м месте... Как я пониманию, все используют div_t, которого я не знаю, и один я извращаюсь с быдлоциклами? -_-

0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
24.06.2011, 15:02 #19
diagon, по-крайней мере я div_t и div не использовал.
А быдлокод и ко мне в код залез. Позволил сэкономить не помню точно уже, от 1 до 3 символов
Удивительно, как программа ради экономии 1 символа может превратиться из вполне читаемой в полный бред
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
24.06.2011, 15:22 #20
Цитата Сообщение от diagon Посмотреть сообщение
если б все так просто было...
а чё мудрить-то? Сумма трёх последних цифр должна быть либо больше суммы трёх первых на единицу, либо больше. Не?

Хотя нет, там последняя цифра первой тройки должна быть на 1 больше/меньше последней цифры второй тройки, а суммы первых двух цифр в тройках должны быть одинаковыми...
0
24.06.2011, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 15:22
Привет! Вот еще темы с решениями:

Разделить строку на две части
дана задача.есть переменная char = россия. надо разделить её на две части...

Разделить строку на две части
По индивидуальному заданию создать функцию для обработки символьных строк. За...

Разделить массив на две части
Помогите с решением задачи. Условие вот такое &quot;дан массив целых чисел, лежащих...

Разделить строки на мелкие части
Помогите реализовать такую вещь: Пользователь вводит слова через запятую...


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

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

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