your programing

정수에 대한 나누기와 모듈로를 어떻게 계산할 수 있습니까?

lovepro 2020. 10. 13. 08:20
반응형

정수에 대한 나누기와 모듈로를 어떻게 계산할 수 있습니까?


C #에서 정수에 대한 나누기와 모듈로를 어떻게 계산할 수 있습니까?


이런 종류의 질문을하기 전에 MSDN 설명서 를 확인하십시오 .

두 정수를 나눌 때 결과는 항상 정수입니다. 예를 들어 7/3의 결과는 2입니다. 7/3의 나머지를 확인하려면 나머지 연산자 ( % )를 사용합니다.

int a = 5;
int b = 3;

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

도 있습니다 Math.DivRem

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

분할은 /연산자를 사용하여 수행됩니다 .

result = a / b;

모듈로 나누기는 %연산자를 사용하여 수행됩니다 .

result = a % b;

재미있는 사실!

'모듈러스'연산은 다음과 같이 정의됩니다.

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

참조 : 모듈 식 산술

그렇게 할 수 는 FAR 느린 % 연산자에 내장 된보다지라도, 당신은 자신의 롤 :

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

편집 : 와우, 원래 여기에 오히려 잘못되었습니다. 저를 잡아 주셔서 감사합니다 @joren

이제 여기서는 C #의 division + 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  

사용자로부터 두 개의 정수를 읽습니다. 그런 다음 나머지와 몫을 계산 / 표시합니다.

// 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();

참고 URL : https://stackoverflow.com/questions/5383050/how-can-i-calculate-divide-and-modulo-for-integers

반응형