Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13

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

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

Студворк — интернет-сервис помощи студентам
Привет всем! помогите пожалуйста кодом.
Необходимо реализовать операцию сравнения двух длинных чисел A>=B
Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2011, 08:28
Ответы с готовыми решениями:

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

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

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

15
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
27.02.2011, 09:26
Если число лежит в диапазоне от 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
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,754
Записей в блоге: 9
27.02.2011, 10:07
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
2 / 2 / 0
Регистрация: 22.06.2010
Сообщений: 6
27.02.2011, 12:21
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
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
27.02.2011, 12:26
Если число лежит в диапазоне от 0 до 4 294 672 295 то
Я немного не точно написал - число может быть от -2 147 336 145 до + -2 147 336 145)))
Цитата Сообщение от forte Посмотреть сообщение
число может быть отрицательным
Если:
C++
1
2
a = -2;
b = -5;
То выводит сообщени: "а больше b".
1
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 13:37  [ТС]
Цитата Сообщение от FroL Посмотреть сообщение
Если число лежит в диапазоне от 0 до 4 294 672 295 то
Я немного не точно написал - число может быть от -2 147 336 145 до + -2 147 336 145)))

Если:
C++
1
2
a = -2;
b = -5;
То выводит сообщени: "а больше b".
имеются в виду числа со 100+ знаками,
0
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 13:48
Тогда можно реализовать так: это число содержится как строка. Потом вы запускаете цикл и начинаете посимвольно сравнивать, с начала.Допустим: a = "581921", b = "582145". Первый шаг - 5 == 5, второй - 8 ==8, третий 1 < 2. Значит второе число больше. Только не забывайте приводить каждое число к типу int.
1
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:07  [ТС]
Цитата Сообщение от 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
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 14:11
Цитата Сообщение от Marina91 Посмотреть сообщение
не работает для отрицательных чисел.
ап народ спасайте
Надо добавить проверку на наличие знака "-" в строках. Если первое число минус, то второе больше. Если оба числа одинаковые то надо искать наименьшее:
C++
1
2
3
4
5
  do
    {
      if(*a > *b) return 0;
    } 
  while(a++, *b++);
1
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:33  [ТС]
Цитата Сообщение от 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
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 14:44
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
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 14:58  [ТС]
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
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
28.02.2011, 18:29
А не получается, когда оба числа отрицательные???
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,754
Записей в блоге: 9
28.02.2011, 18:40
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
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 13
28.02.2011, 19:24  [ТС]
igorrr37
спасибо, работает
C++
1
2
while(!isdigit(*a)&&*a!='-')++a;
while(!isdigit(*b)&&*b!='-')++b;
объясните, что делает ф-ия isdigit
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
28.02.2011, 19:25
Цитата Сообщение от Marina91 Посмотреть сообщение
объясните, что делает ф-ия isdigit
Дает истину, если символ цыфра.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2011, 19:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru