Как я могу рассчитать деление и по модулю для целых чисел в С#?
Как я могу рассчитать divide и modulo для целых чисел?
Ответ 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();