Вычитание без знака минус - PullRequest
11 голосов
/ 31 марта 2009

Как вычесть два целых числа в C без оператора -?

Ответы [ 16 ]

0 голосов
/ 13 августа 2010

Это будет работать с использованием целочисленного переполнения:

#include<limits.h>    
int subtractWithoutMinusSign(int a, int b){
         return a + (b * (INT_MAX + INT_MAX + 1));
}

Это также работает для поплавков (при условии, что вы создаете версию поплавка ...)

0 голосов
/ 06 июля 2010
void main()
{
int a=5;
int b=7;

while(b--)a--;
printf("sud=%d",a);

}
0 голосов
/ 09 июня 2010

Не проверено. Без использования 2-х дополнений:

#include <stdlib.h>
#include <stdio.h>
int sillyNegate(int x) {
   if (x <= 0)
     return abs(x);
   else {
     // setlocale(LC_ALL, "C"); // if necessary.
     char buffer[256];
     snprintf(buffer, 255, "%c%d", 0x2d, x);
     sscanf(buffer, "%d", &x);
     return x;
   }
}

Предполагая, что длина int намного меньше, чем 255, и обратный обход snprintf / sscanf не приведет к какому-либо неопределенному поведению (верно? Верно?).

Вычитание может быть вычислено с использованием a - b == a + (-b).


Альтернатива:

#include <math.h>
int moreSillyNegate(int x) {
   return x * ilogb(0.5);  // ilogb(0.5) == -1;
}

0 голосов
/ 09 июня 2010
        int num1, num2, count = 0;
        Console.WriteLine("Enter two numebrs");
        num1 = int.Parse(Console.ReadLine());
        num2 = int.Parse(Console.ReadLine());
        if (num1 < num2)
        {
            num1 = num1 + num2;
            num2 = num1 - num2;
            num1 = num1 - num2;
        }
        for (; num2 < num1; num2++)
        {
            count++;
        }
        Console.WriteLine("The diferrence is " + count);
0 голосов
/ 04 апреля 2009

Создайте таблицу поиска для каждого возможного случая int-int!

0 голосов
/ 31 марта 2009

Поскольку в вопросе заданы целые числа, а не int s, вы можете реализовать небольшой интерпретатор, чем Церковные цифры .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...