Подтвердить что ты не робот

Как я могу рассчитать divide и modulo для целых чисел?

Как я могу рассчитать деление и по модулю для целых чисел в С#?

4b9b3361

Ответ 1

Прежде чем задавать такие вопросы, пожалуйста, проверьте документацию MSDN.

Когда вы делите два целых числа, результат всегда является целым числом. Например, результат 5/2 равен 2. Чтобы определить остаток от 5/2, используйте оператор modulo (%).

int a = 5;
int b = 3;

int div = a / b; //div is 1
int mod = a % b; //mod is 2

Ответ 2

Существует также Math.DivRem

quotient = Math.DivRem(dividend, divisor, out remainder);

Ответ 3

Разделение выполняется с помощью оператора /:

result = a / b;

Разделение по модулю выполняется с помощью оператора %:

result = a % b;

Ответ 4

Забавный факт!

Операция "модуль" определяется как:

a % n ==> a - (a/n) * n

Ссылка: Модульная арифметика

Таким образом, вы можете свернуть самостоятельно, хотя он будет быстрее FAR, чем встроенный оператор%:

public static int Mod(int a, int n)
{
    return a - (int)((double)a / n) * n;
}

Изменить: ничего себе, о чем-то плохого здесь, изначально, спасибо @joren за то, что он поймал меня

Теперь я полагаюсь на то, что деление + cast-to-int в С# эквивалентно Math.Floor (т.е. оно уменьшает дроби), но вместо "истинной" реализации должно быть что-то вроде:

public static int Mod(int a, int n)
{
    return a - (int)Math.Floor((double)a / n) * n;
}

Фактически вы можете видеть различия между% и "истинным модулем" со следующим:

var modTest =
    from a in Enumerable.Range(-3, 6)
    from b in Enumerable.Range(-3, 6)
    where b != 0
    let op = (a % b)
    let mod = Mod(a,b)
    let areSame = op == mod
    select new 
    { 
        A = a,
        B = b,
        Operator = op, 
        Mod = mod, 
        Same = areSame
    };
Console.WriteLine("A      B     A%B   Mod(A,B)   Equal?");
Console.WriteLine("-----------------------------------");
foreach (var result in modTest)
{
    Console.WriteLine(
        "{0,-3} | {1,-3} | {2,-5} | {3,-10} | {4,-6}", 
        result.A,
        result.B,
        result.Operator, 
        result.Mod, 
        result.Same);
}

Результаты:

A      B     A%B   Mod(A,B)   Equal?
-----------------------------------
-3  | -3  | 0     | 0          | True  
-3  | -2  | -1    | -1         | True  
-3  | -1  | 0     | 0          | True  
-3  | 1   | 0     | 0          | True  
-3  | 2   | -1    | 1          | False 
-2  | -3  | -2    | -2         | True  
-2  | -2  | 0     | 0          | True  
-2  | -1  | 0     | 0          | True  
-2  | 1   | 0     | 0          | True  
-2  | 2   | 0     | 0          | True  
-1  | -3  | -1    | -1         | True  
-1  | -2  | -1    | -1         | True  
-1  | -1  | 0     | 0          | True  
-1  | 1   | 0     | 0          | True  
-1  | 2   | -1    | 1          | False 
0   | -3  | 0     | 0          | True  
0   | -2  | 0     | 0          | True  
0   | -1  | 0     | 0          | True  
0   | 1   | 0     | 0          | True  
0   | 2   | 0     | 0          | True  
1   | -3  | 1     | -2         | False 
1   | -2  | 1     | -1         | False 
1   | -1  | 0     | 0          | True  
1   | 1   | 0     | 0          | True  
1   | 2   | 1     | 1          | True  
2   | -3  | 2     | -1         | False 
2   | -2  | 0     | 0          | True  
2   | -1  | 0     | 0          | True  
2   | 1   | 0     | 0          | True  
2   | 2   | 0     | 0          | True  

Ответ 5

Прочитайте два целых числа от пользователя. Затем вычислить/отобразить остаток и коэффициент,

// When the larger integer is divided by the smaller integer
Console.WriteLine("Enter integer 1 please :");
double a5 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter integer 2 please :");
double b5 = double.Parse(Console.ReadLine());

double div = a5 / b5;
Console.WriteLine(div);

double mod = a5 % b5;
Console.WriteLine(mod);

Console.ReadLine();