Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Marina91
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
#1

Длинная арифметика: операция сравнения двух чисел (A >= B)

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

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

Реализовать оператор сравнения в классе длинных чисел (длинная арифметика)
Здравствуйте, дорогие форумчане. Недавно назрел вопрос, как бы сделать...

Сложение двух чисел (длинная арифметика)
Нужно реализовать длинную арифметику (сложение двух больших чисел), но на экран...

Длинная арифметика: умножение двух длинных чисел
Всем привет! Снова к Вам за помощью. Алгоритм умножения двух длинных чисел:...

Длинная арифметика. Перемножение двух больших чисел
Насчет алгоритма выполнения не могу пока что сказать ничего. Дело в том, что...

Длинная арифметика. Умножение двух длинных чисел.
Есть 2 числа, храняющиеся в int векторах, нужна функция, которая возвращает их...

15
FroL
61 / 49 / 6
Регистрация: 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
1867 / 1483 / 751
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
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 / 6
Регистрация: 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 / 6
Регистрация: 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 / 6
Регистрация: 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 / 6
Регистрация: 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 / 6
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 18:29 #13
А не получается, когда оба числа отрицательные???
0
igorrr37
1867 / 1483 / 751
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
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
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
28.02.2011, 19:25 #16
Цитата Сообщение от Marina91 Посмотреть сообщение
объясните, что делает ф-ия isdigit
Дает истину, если символ цыфра.
1
28.02.2011, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2011, 19:25

Длинная арифметика: суммирование двух введенных пользователем больших чисел
решите задачку: пользователь вводит 2 больших числа (числа от -1*2^127 до...

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

Длинная арифметика: деление с остатком двух чисел, находящихся в двусвязном списке
Доброго времени суток. Подскажите, как реализовать деление с остатком двух...


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

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

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