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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
#1

Длинная арифметика - C++

27.02.2011, 08:28. Просмотров 1332. Ответов 15
Метки нет (Все метки)

Привет всем! помогите пожалуйста кодом.
Необходимо реализовать операцию сравнения двух длинных чисел A>=B
Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 08:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длинная арифметика (C++):

Длинная арифметика - C++
Всем привет! Хотелось бы узнать -- есть ли в С++ библиотека, где реализованы операции над длинными числами?

Длинная арифметика С++ - C++
требуется написать задачу для подсчета суммы s=1^2+2^2+3^2+...+n^2 n>=20000

Длинная арифметика - C++
Всем доброго вечера. Нужна помощь в решении задачи. Составить программу для вычисления числа: 2^64-1. В результате сохранить все...

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

Длинная арифметика - C++
Помогите реализовать длинную арифметику #include <iostream> #include <string> using namespace std; int main(){ int a; string...

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

15
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
27.02.2011, 09:26 #2
Если число лежит в диапазоне от 0 до 4 294 672 295 то:
C++
1
2
3
4
5
6
7
long a, b;
cout<<"Введите первое число: "<<endl;
cin>>a;
cout<<"Введите второе число: "<<endl;
cin>>b;
if(a >= b) cout<<"a больше b"<<endl;
else cout<<"a меньше b"<<endl;
1
igorrr37
1716 / 1344 / 166
Регистрация: 21.12.2010
Сообщений: 2,066
Записей в блоге: 10
27.02.2011, 10:07 #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
#include<stdio.h>
#include<string.h>
 
int GreatEq(const char *a, const char* b){
    if(strlen(a)<strlen(b)) return 0;
    else if(strlen(a)>strlen(b)) return 1;
    else {
        do{
            if(*a<*b) return 0;
        }while(a++, *b++);
        return 1;
    }
}
 
int main (void){
    char a[100], b[100];
    printf("a= ");
    gets(a);
    printf("b= ");
    gets(b);
    if(GreatEq(a, b)) puts("a>=b");
    else puts("a<b");
    return 0;
}
2
forte
2 / 2 / 0
Регистрация: 22.06.2010
Сообщений: 6
27.02.2011, 12:21 #4
Pascal
1
2
3
4
5
6
7
8
9
10
11
Function Eq(A, B : TLong) : Boolean;
    Var i : Integer;
    Begin
        Eq := False;
        If A[0] <> B[0] Then Exit 
        Else Begin
            i := l;
            While (i <= A[0]) And (A[i] = B[i]) Do Inc(i);
            Eq := i = A[0] + l
              End
    End;
1
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
27.02.2011, 12:26 #5
Если число лежит в диапазоне от 0 до 4 294 672 295 то
Я немного не точно написал - число может быть от -2 147 336 145 до + -2 147 336 145)))
Цитата Сообщение от forte Посмотреть сообщение
число может быть отрицательным
Если:
C++
1
2
a = -2;
b = -5;
То выводит сообщени: "а больше b".
1
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 13:37  [ТС] #6
Цитата Сообщение от FroL Посмотреть сообщение
Если число лежит в диапазоне от 0 до 4 294 672 295 то
Я немного не точно написал - число может быть от -2 147 336 145 до + -2 147 336 145)))

Если:
C++
1
2
a = -2;
b = -5;
То выводит сообщени: "а больше b".
имеются в виду числа со 100+ знаками,
0
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 13:48 #7
Тогда можно реализовать так: это число содержится как строка. Потом вы запускаете цикл и начинаете посимвольно сравнивать, с начала.Допустим: a = "581921", b = "582145". Первый шаг - 5 == 5, второй - 8 ==8, третий 1 < 2. Значит второе число больше. Только не забывайте приводить каждое число к типу int.
1
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:07  [ТС] #8
Цитата Сообщение от igorrr37 Посмотреть сообщение
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
#include<stdio.h>
#include<string.h>
 
int GreatEq(const char *a, const char* b){
    if(strlen(a)<strlen(b)) return 0;
    else if(strlen(a)>strlen(b)) return 1;
    else {
        do{
            if(*a<*b) return 0;
        }while(a++, *b++);
        return 1;
    }
}
 
int main (void){
    char a[100], b[100];
    printf("a= ");
    gets(a);
    printf("b= ");
    gets(b);
    if(GreatEq(a, b)) puts("a>=b");
    else puts("a<b");
    return 0;
}
не работает для отрицательных чисел.
ап народ спасайте
0
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 14:11 #9
Цитата Сообщение от Marina91 Посмотреть сообщение
не работает для отрицательных чисел.
ап народ спасайте
Надо добавить проверку на наличие знака "-" в строках. Если первое число минус, то второе больше. Если оба числа одинаковые то надо искать наименьшее:
C++
1
2
3
4
5
  do
    {
      if(*a > *b) return 0;
    } 
  while(a++, *b++);
1
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:33  [ТС] #10
Цитата Сообщение от FroL Посмотреть сообщение
Надо добавить проверку на наличие знака "-" в строках. Если первое число минус, то второе больше. Если оба числа одинаковые то надо искать наименьшее:
C++
1
2
3
4
5
  do
    {
      if(*a > *b) return 0;
    } 
  while(a++, *b++);
C++
1
2
3
4
5
6
7
8
9
int GreatEq(const char *a, const char* b){
    if(strlen(a)<strlen(b)) return 0;
    else if(strlen(a)>strlen(b)) return 1;
    else {
        do{
            if(*a<*b) return 0;
        }while(a++, *b++);
        return 1;
    }
что тут надо добавить на проверку "-", напиши пожалуйста
0
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 14:44 #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
27
28
29
30
31
int GreatEq(const char *a, const char* b)
  {
    if(a[0] == 45 && b[0] == 45)
      {
        if(strlen(a)<strlen(b)) return 1;
        else if(strlen(a)>strlen(b)) return 0;
        else 
          {
            do
              {
                if(*a < *b) return 1;
              }while(a++, *b++);
            return 0;     
      }
    else if(a[0] == 45)  return 0;
    else if(b[0] == 45)  return 1;
    else
      {
        if(strlen(a)<strlen(b)) return 0;
        else if(strlen(a)>strlen(b)) return 1;
        else 
          {
            do
              {
                if(*a > *b) return 1;
              }
            while(a++, *b++);
            return 0;
          }
      }
  }
1
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:58  [ТС] #12
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
#include<stdio.h>
#include<string.h>
#include<iostream>
 
int GreatEq(const char *a, const char* b)
  {
    if(a[0] == 45 && b[0] == 45)
      {
        if(strlen(a)<strlen(b)) return 1;
        else if(strlen(a)>strlen(b)) return 0;
        else 
          {
            do
              {
                if(*a < *b) return 1;
              }while(a++, *b++);
            return 0;     
      }
    else if(a[0] == 45)  return 0;
    else if(b[0] == 45)  return 1;
    else
      {
        if(strlen(a)<strlen(b)) return 0;
        else if(strlen(a)>strlen(b)) return 1;
        else 
          {
            do
              {
                if(*a > *b) return 1;
              }
            while(a++, *b++);
            return 0;
          }
      }
  }
 
int main (void){
    char a[100], b[100];
    printf("a= ");
    gets(a);
    printf("b= ");
    gets(b);
    if(GreatEq(a, b)) puts("a>=b");
    else puts("a<b");
system("pause");
}
не работает, что не так?
0
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 18:29 #13
А не получается, когда оба числа отрицательные???
0
igorrr37
1716 / 1344 / 166
Регистрация: 21.12.2010
Сообщений: 2,066
Записей в блоге: 10
28.02.2011, 18:40 #14
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
#include<stdio.h>
#include<string.h>
 
int GreatEq(const char *a, const char* b){
    while(!isdigit(*a)&&*a!='-')++a;
    while(!isdigit(*b)&&*b!='-')++b;
    char *pa=a, *pb=b;
    if(isdigit(*a)&&*b=='-')return 1;
    else if(isdigit(*b)&&*a=='-')return 0;
    else{
        if(strlen(a)<strlen(b)) return *pa=='-'?1:0;
        else if(strlen(a)>strlen(b)) return *pa=='-'?0:1;
        else {
            do{
                if(*a<*b) return *pa=='-'?1:0;
            }while(a++, *b++);
            return 1;
        }
    }
}
 
int main (void){
    char a[100], b[100];
    printf("a= ");
    gets(a);
    printf("b= ");
    gets(b);
    if(GreatEq(a, b)) puts("a>=b");
    else puts("a<b");
    return 0;
}
1
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 19:24  [ТС] #15
igorrr37
спасибо, работает
C++
1
2
while(!isdigit(*a)&&*a!='-')++a;
while(!isdigit(*b)&&*b!='-')++b;
объясните, что делает ф-ия isdigit
0
28.02.2011, 19:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2011, 19:24
Привет! Вот еще темы с ответами:

Длинная арифметика - C++
http://www.********/index.asp?main=task&amp;id_task=103 Как решить эту задачу? С помощью чего, и в чем смысл решения длянной...

длинная арифметика - C++
Долгое время бьюсь как составить программу по этой теме в интернете искал нашел это for (int i=(int)s.length(); i&gt;0; i-=9) if (i &lt; 9) ...

Длинная арифметика N+1 - C++
Помогите плиз. Вводится n. Вывести N+1. Ограничений нет. Я понимаю что надо ввести массив и читать каждый символ. Оставшиеся елементы...

Длинная арифметика - C++
Нужно реализовать сложение и умножение больших чисел. Есть идея, необходима помощь в реализации на C++. Собственно, идеи такие... ...


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

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

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