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

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

Войти
Регистрация
Восстановить пароль
 
 
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
#1

1% от большого числа - C++

16.09.2012, 18:09. Просмотров 613. Ответов 16
Метки нет (Все метки)

Вводится число 10^6<=N<=10^200
Надо вывести 1% от него.
Кто-нибудь может это решить, я очень много времени потратил впустую...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 1% от большого числа (C++):

Деление большого числа - C++
Суть такова: Реализовываю класс для системы остаточных классов, нужно считать большое число ( допустим больше 20 знаков), понятное дело что...

Факториал большого числа - C++
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это...

Модуль большого числа - C++
Доброго времени суток. Вот такая проблема. Имеется большое число, тип long double, нужно найти остаток от деления на 43, к примеру....

Вычисление факториала большого числа - C++
написать программу, которая вычисляла бы факториал заданного большого числа, например 500, и результат вычислений с точностью до единицы...

Взять корень из степени большого числа - C++
Всем привет задачакая с помощью библиотеки math.h и функции pow() нужно взять корень степени числа. код написанн но проблема в том что...

Последняя цифра большого числа Фибоначчи - C++
Помогите разобраться. Вроде все правильно и ответ правильный, но процесс решения не правильный. Не могу понять, что не так. Уже третий день...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.09.2012, 18:12 #2
от степени вычесть двоечку чтоли или что?
что значит вывести? каким образом это число представлено?
0
IrineK
Заблокирован
16.09.2012, 18:13 #3
Считайте число строкой.
Ответом будет подстрока, начиная с третьего символа слева и до конца.
0
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
16.09.2012, 18:25  [ТС] #4
Цитата Сообщение от IrineK Посмотреть сообщение
Считайте число строкой.
Ответом будет подстрока, начиная с третьего символа слева и до конца.
Забыл, самое важное написать: если ответ - дробное число, округлить в большую сторону.
Т.е. тут не все так просто... Насчет строки, я догадался конечно-же, но есть множество мелочей, которые стоит учесть, поэтому я создал тему здесь.

Цитата Сообщение от DU Посмотреть сообщение
от степени вычесть двоечку чтоли или что?
что значит вывести? каким образом это число представлено?
Вводится строка, вывести тоже строку.
0
IrineK
Заблокирован
16.09.2012, 18:30 #5
если ответ - дробное число, округлить в большую сторону
Ответ - по-прежнему подстрока, начиная с третьего символа слева, но не до конца, а до запятой. Первый символ после запятой проанализировать и соответствующим образом округлить "число-строку".
0
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
16.09.2012, 18:34  [ТС] #6
Цитата Сообщение от IrineK Посмотреть сообщение
Ответ - по-прежнему подстрока, начиная с третьего символа слева, но не до конца, а до запятой. Первый символ после запятой проанализировать и соответствующим образом округлить "число-строку".
Да,согласен с алгоритмом, но можно посмотреть на его реализацию?
0
IrineK
Заблокирован
16.09.2012, 18:36 #7
Реализуйте - посмотрим.
0
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
16.09.2012, 18:49  [ТС] #8
Цитата Сообщение от IrineK Посмотреть сообщение
Реализуйте - посмотрим.
Хорошо, есть частичная реализация...
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
#include <iostream>
 
using namespace std;
 
int Leng(char a[])
{
    bool isNULL; int i;
    while (isNULL==false)
    {
     if (a[i]==NULL)
     {
       isNULL=true;
       break;
     }
     i++;
    }
    return i;
 
}
 
void numchg(int num, char s[],int l) // Функция, которая обрабатывает строку,при переходе через десяток
{
    char str2[l]; int j=1; bool byte1;
    for (int j=0;j<l;j++)              //если первая цифра 9
    {
        str2[j]='9';
        if (str2[j]!=s[j]) byte1=true;
    }
    if (byte1==true)  //если девятка первая, то "сдвинуть" строку
    {
        s[0]='1';
        while (s[j+1]!=NULL) s[j]='0';
    }
    while (s[num]=='9')
    {
        s[num]='0';
        if (s[num-1]=='9')
        {
            num--;
            numchg(num,s,l);
        }
        else s[num-1]+=1;
        if (s[num-1]=='8') break; 
    }
}
int main()
{
  char str1[202];
  cin >> str1;
  int l=Leng(str1);
  if ((str1[l-2]!='0') || (str1[l-1]!='0'))
  {
     if (str1[l-3]=='9') numchg(l-3,str1,l);
     else str1[l-3]+=1;
  }
  str1[l-1]=NULL; str1[l-2]=NULL;
  cout << str1;
}
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.09.2012, 18:49 #9
Цитата Сообщение от IrineK Посмотреть сообщение
Ответом будет подстрока, начиная с третьего символа слева и до конца.
неверно (не стой стороны удаляете цифры). Пока еще 1% от 2000 это 20, а не 00.
0
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
16.09.2012, 18:52  [ТС] #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Пока еще 1% от 2000 это 20, а не 00.
Так и выводит...
Проблемы возникают, например если ввести много девяток...
0
IrineK
Заблокирован
16.09.2012, 18:53 #11
valeriikozlov, ну-у да-а )
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.09.2012, 18:58 #12
Цитата Сообщение от MilosedOFF Посмотреть сообщение
Проблемы возникают, например если ввести много девяток...
округляйте начиная с правой строны. Если самый левый элемент окажется больше или равным 10, то его значение делаете равным x%=10. А перед выводом числа выводите 1. Самой число выводите с лева направо, кроме самых 2-х правых цифр.
0
IrineK
Заблокирован
16.09.2012, 19:29 #13
Пока не учитывая "проблему 9":

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{   int i,len;
    char bigNumber[250], perCent[250];
    std::cin>>bigNumber;
 
    len = strlen(bigNumber);
    for(i=0;i<len-2;i++)
        perCent[i] = bigNumber[i];
    perCent[i] = '\0';
 
    if(bigNumber[len-2]>52) 
        perCent[i-1]++;
 
    std::cout<<perCent;
 
    std::cin.sync();
    std::cin.get();
    return 0;
}
0
MilosedOFF
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 50
16.09.2012, 19:32  [ТС] #14
Спасибо всем за ответы, завтра разберусь со всем этим.
0
IrineK
Заблокирован
16.09.2012, 20:16 #15
Теперь и девятки построились
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
#include <iostream>
 
int main()
{   int i,len,cur;
    char bigNumber[250], perCent[250];
    std::cin>>bigNumber;
 
    len = strlen(bigNumber);
    for(i=0;i<len-2;i++)
        perCent[i] = bigNumber[i];
    perCent[i] = '\0';
 
    if(bigNumber[len-2]>'4') 
    {   cur = i-1;
        while(perCent[cur]=='9' && cur>-1)
        {   perCent[cur]='0';
            cur--;
        }
 
        if(cur==-1)
        {   perCent[0]='1';
            perCent[len-2]='0';
            perCent[len-1] ='\0';
        }
        else
            perCent[cur]++;
    }
 
    std::cout<<perCent;
 
    std::cin.sync();
    std::cin.get();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 20:16
Привет! Вот еще темы с ответами:

Возведение большого числа в большую степень - C++
Появился вопрос. Реализовую алгоритм Диффи — Хеллмана и не могу возвести 300-значное число в 100-значную степень). Делать циклом - вообще...

Вывод второго самого большого множителя числа N - C++
Доброго времени суток. Задание в том что, надо вывести второй самый большой множитель числа N. Например если я ввожу 48, то ответ...

Класс очень большого числа. Перегрузка operator++ - C++
Число хранится в массиве. Не могу сделать перегрузку ++. Помогите. byte* massiv; massiv = new byte; Big* operator++() {...

Извлечь любой корень из любого большого числа - C++
нужно разработать Windows-приложение для извлечения любого корня из любого большого числа. как бы функционал sqrt ограничен, как быть со...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2012, 20:16
Ответ Создать тему
Опции темы

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