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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 22:28     разделить число на 2 части #1
как разделить число на 2 части
вот у меня есть число в int :
445219

Я точно знаю что у меня с 6 чисел... и как мне разделить их в 2 int по 3 числа
ну чтобы типа вот так:
C++
1
2
3
4
int x=445219
 
y=445
z=219
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JeyKip
53 / 45 / 2
Регистрация: 23.06.2011
Сообщений: 122
23.06.2011, 22:55     разделить число на 2 части #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();
}
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:07  [ТС]     разделить число на 2 части #3
ладно так у меня не проканало...
возможно ли char переобразовать в int?
ну типа в char есть чило 219 нужно его записать в int
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2011, 23:11     разделить число на 2 части #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 понимается строка?
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:23  [ТС]     разделить число на 2 части #5
char типа как массив
char x[100]
и каждый елемент массива 1 символ
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2011, 23:29     разделить число на 2 части #6
Ну то есть строка, скорее всего.
Тогда atoi в помощь.
C
1
int c = atoi("219");
Добавлено через 2 минуты
правда null-terminated строка отличается от просто массива символов тем, что данные завершаются символом '\0'
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
23.06.2011, 23:58  [ТС]     разделить число на 2 части #7
блин чтото ничего не получается!
помогите мне решить:
http://********/?main=task&id_task=327
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.06.2011, 02:16     разделить число на 2 части #8
дык если за тебя решат, в чём понт?

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

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

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

Добавлено через 6 минут
Хотя вот заголовок cstdio при подключённом fstream оказался не нужен. Не знаю, можно ли на это рассчитывать. Но теперь получается 196 (199).
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.06.2011, 07:39     разделить число на 2 части #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), так что можете сдавать, только это останется на вашей совести =)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.06.2011, 14:07     разделить число на 2 части #11
Расскажите как у вас там символы считаются? А то мне интересно стало, на 190 (с пробелами и пр.) написал))
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
24.06.2011, 14:11     разделить число на 2 части #12
А просто выкидываются абсолютно все пробелы и переводы строки, если я правильно понял
190 с пробелами — это круто. Ты тоже читер! Моя без пробелов только 195 смог.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.06.2011, 14:11     разделить число на 2 части #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
Расскажите как у вас там символы считаются? А то мне интересно стало, на 190 (с пробелами и пр.) написал))
Просто все символы с учетом комментариев и без учета пробелов, символов табуляции и ентеров.
P.S. вы оба читеры, я только до 199 догнал, при этом использовал дикий быдлокод... Зарегайтесь и киньте туда срр файл. А то ведь еще не факт, что правильно решили =)
Jumper19
 Аватар для Jumper19
13 / 13 / 0
Регистрация: 27.12.2010
Сообщений: 83
24.06.2011, 14:21  [ТС]     разделить число на 2 части #14
спасибо,
да мне не главное сдать было а разобраться...

еще раз спасибо
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.06.2011, 14:26     разделить число на 2 части #15

Не по теме:

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



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

Не по теме:

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

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.06.2011, 14:51     разделить число на 2 части #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
только первое число (количество тестов) из входного файла надо выкинуть, оно там ни за чем...
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
24.06.2011, 14:56     разделить число на 2 части #17
easybudda, во-первых, читать и писать с перенаправлением — это не спортивно. Там нет возможности влиять на запуск.
Во-вторых, разве эта программа решает поставленную задачу? (определить является ли счастливым следующий или предыдущий). Я запускать не пробовал

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

Не по теме:


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

grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
24.06.2011, 15:02     разделить число на 2 части #19
diagon, по-крайней мере я div_t и div не использовал.
А быдлокод и ко мне в код залез. Позволил сэкономить не помню точно уже, от 1 до 3 символов
Удивительно, как программа ради экономии 1 символа может превратиться из вполне читаемой в полный бред
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 15:22     разделить число на 2 части
Еще ссылки по теме:

Разделить строку на две части C++
Как разделить программу на две части? C++
Разделить дробное число на 2 части: целая часть числа и его дробная часть C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.06.2011, 15:22     разделить число на 2 части #20
Цитата Сообщение от diagon Посмотреть сообщение
если б все так просто было...
а чё мудрить-то? Сумма трёх последних цифр должна быть либо больше суммы трёх первых на единицу, либо больше. Не?

Хотя нет, там последняя цифра первой тройки должна быть на 1 больше/меньше последней цифры второй тройки, а суммы первых двух цифр в тройках должны быть одинаковыми...
Yandex
Объявления
24.06.2011, 15:22     разделить число на 2 части
Ответ Создать тему
Опции темы

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