我怎样才能计算分数和模整数?
我怎样才能计算除法和模数整数在C#中?
在提出这类问题之前,请查看MSDN文档 。
当你分两个整数时,结果总是一个整数。 例如,5/2的结果是2.要确定5/2的余数,请使用模运算符(%)。
int a = 5; int b = 3; int div = a / b; //div is 1 int mod = a % b; //mod is 2
还有Math.DivRem
quotient = Math.DivRem(dividend, divisor, out remainder);
使用/
运算符执行分区:
result = a / b;
Modulo除法使用%
运算符完成:
result = a % b;
有趣的事实!
“模数”操作定义为:
a % n ==> a - (a/n) * n
参考: 模块化算术
所以你可以推出自己的,虽然它会比内置的%运算符慢:
public static int Mod(int a, int n) { return a - (int)((double)a / n) * n; }
编辑:哇,原来这里相当糟糕,谢谢@ joren来抓我
现在在这里,我依赖于C#中的division + cast-to-int等于Math.Floor
(也就是说,它会减less分数)的事实,但是一个“真正的”实现可能是这样的:
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("ABA%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); }
结果:
ABA%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
从用户读取两个整数。 然后计算/显示余数和商,
// 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();