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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
#1

муниципальная олимпиада. Странный output - C++

12.10.2011, 11:47. Просмотров 374. Ответов 3
Метки нет (Все метки)

http://informatics.mccme.ru/moodle/m...hapterid=720#1 - сама задача
код:
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
#include<iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
    vector<int> number;
    int lolka;
    cin>>lolka;
    int c=1;
    while(lolka/pow(10.0,double(c))!=0)
        ++c;
    int b=c;
    do
    {
              number.push_back(lolka%10);
        lolka/=10;
        --b;
    }while(b!=0);
    sort(number.begin(),number.end());
    int d=0;
    while(number[d]!=0)
        ++d;
    int e=d;
    for(d;d<c+e;d++)
        cout<<number[d];
    return 0;
}
вывод на 1513:
0000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000001135

почему так и как исправить на AC?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 11:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос муниципальная олимпиада. Странный output (C++):

как сделать в MS VS 2010 express output не в консоль в output windows - C++
сабж заранее спасибо

Олимпиада - C++
Задача 1. Поезда (20 баллов) Участок железной дороги проходит через станции, пронумерованные от 1 до N. Из расписания движения поездов...

Школьная олимпиада - C++
http://s019.***********/i607/1210/4a/3b6bf193f9cb.png Вот задачи... Помогите, кто чем сможет! Мне срочно к завтра надо! А с++ совсем не...

Олимпиада по информатике - C++
Вечер добрый! Кто, что может посоветовать для подготовки, может задачники какие или еще что? И по поводу городских олимпиад, можно ли...

прошедшая олимпиада 14-16.12.13 - C++
Добрый день, недавно я участвовал на олимпиаде вот на этом сайте http://contest.ncstu.ru. Первый тур я более менее прошёл, а вот со...

Олимпиада 1999г. - C++
Помогите сделать курсач.

3
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.10.2011, 12:01 #2
Я так делал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <sstream>
#include <algorithm>
#include <functional>
int main()
{
    std::string str;
    std::cin >> str;
    std::sort(str.begin(), str.end(), std::less<int>());
    if (str[0] == '0') // если в начале числа нуль
    {
        const std::string::iterator it = std::find_if(str.begin(), str.end(), // находим первое число, не равное нулю
                std::bind2nd(std::not_equal_to<char>(), '0') );
        if (it != str.end() ) 
            std::swap(*str.begin(), *it); //и меняем его местами с первым нулем
    }
    std::cout << str << ' ';
}
1
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 13:17 #3
Hi4ko, проблема в том, что в строке
C++
1
 while(lolka/pow(10.0,double(c))!=0)
ты пытаешься выполнить нецелочисленное деление, соответственно, этот цикл не останавливает работу, когда получено дробное число 0.1513, а работает и дальше (0,01513!=0, 0,001513!=0 и т.д.). Для проверки можешь запустить пошагово и посмотреть на значение с. Соответственно в вектор ты пишешь все эти лишние нули, обрезанные до целого, вот и получается такая куча нулей

P.S. Зачем тебе STL, если ты не пользуешься его средствами, например, работаешь с вектором как с массивом - по индексу, а не по итератору?
0
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
12.10.2011, 16:27  [ТС] #4
Цитата Сообщение от aeshes Посмотреть сообщение
Hi4ko, проблема в том, что в строке
C++
1
 while(lolka/pow(10.0,double(c))!=0)
ты пытаешься выполнить нецелочисленное деление, соответственно, этот цикл не останавливает работу, когда получено дробное число 0.1513, а работает и дальше (0,01513!=0, 0,001513!=0 и т.д.). Для проверки можешь запустить пошагово и посмотреть на значение с. Соответственно в вектор ты пишешь все эти лишние нули, обрезанные до целого, вот и получается такая куча нулей

P.S. Зачем тебе STL, если ты не пользуешься его средствами, например, работаешь с вектором как с массивом - по индексу, а не по итератору?
Видимо да, нафига STL здесь)
спасибо)
0
12.10.2011, 16:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2011, 16:27
Привет! Вот еще темы с ответами:

Олимпиада по программированию - C++
28 апреля государственный тур олимпиада по программированию (в Армении), и я готовлюсь к олимпиаде. Прошу вас, если несложно дайте задач...

Школьная олимпиада по информатике - C++
Учу 1ый год C++. Точнее 2 недели. Работать могу пока что только с условными операторами(if,while,for). Не могу решить эти задачи Задачи....

Международная Жаутыковская Олимпиада - 2009 - C++
Уважаемые друзья... Есть ли у кого нибудь решения задач Международной Жаутыковской Олимпиады 2009 по информатике... Буду признателен если...

Вывести код программы!!!(Олимпиада) - C++
Задание: Написать программу которая выводит на экран свой сбственный код. Ограничения: Внешнюю память (ввод с клавиатуы,...


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

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

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