문제

C#에서 큰 정수를 어떻게 처리합니까?

나에게 디바이저의 제품을 줄 함수가 있습니다.

private static int GetDivisorProduct(int N, int product)
    {
        for (int i = 1; i < N; i++)
        {
            if (N % i == 0)
            {
                Console.WriteLine(i.ToString());
                product *= i;
            }
        }

        return product;
    }

호출 함수는입니다 GetDivisorProduct(N, 1)

결과가 4 자리보다 크면 마지막 4 자리 만 얻어야합니다. (예 : 957의 입력을 제공하면 마지막 네 값 만 트리밍 한 후 출력은 7493입니다. 실제 결과는 876467493입니다.).

기타 샘플 입력 : 10000을 주면 출력이 0입니다.

그만큼 BigInteger C# 라이브러리에서 클래스가 제거되었습니다!

마지막 4 자리를 어떻게 얻을 수 있습니까?

도움이 되었습니까?

해결책

마지막 4 자리 만보고 있다면 정수보다 큰 것이 필요하지 않습니다. 이걸 고려하세요:

두 숫자를 곱하면 가장 중요한 숫자에만 관심이 있다면 (즉, 마지막 4 자리) 가장 상단 자리는 효과가 없습니다 결과의 가장 낮은 숫자로 ...버리다"가장 중요한 (오른쪽) 숫자 당신이 곱하기 전에.

예를 들어 : 나는 두 개의 많은 숫자를 곱하고 싶지만 마지막 두 자리 만 있으면됩니다.

int num1 = 123456789;
int num2 = 987654321;

int result = num1 * num2; // Last two digits would be "69" but this OVERFLOWS

그러나 우리가 마지막 두 자리 만 곱하면 ...

int result = (num1 % 100) * (num2 % 100);  // result = 89 * 21

89 * 21 = 1869 (마지막 두 자리는 여전히 "69" 하지만 우리는 오버플로되지 않았습니다).

나는이 기술을 사용했다 계산합니다 1,000,000 계승의 6 자리 숫자.

다른 팁

.NET 4.0 a Biginteger 수업

글쎄, 당신은 다음과 같이 코드를 수정할 수 있습니다.

    for (int i = 1; i < N; i++)
    {
        if (N % i == 0)
        {
            Console.WriteLine(i.ToString());
            product *= i;
        }
        if (product > 10000 * N)
        {
            product %= 10000;
        }
    }

(10000*K + L)의 마지막 4 자리가 있기 때문입니다.r은 l과 동일합니다R. 실제 제품 유형은 처리하려는 N의 범위에 따라 다릅니다. 모든 정수 유형이라면 제품이 길어야합니다.

그건 그렇고, 항상 1 인 경우 왜 제품을 매개 변수로 전달합니까?

제품에 대한 INT 대신 이중 또는 길이를 사용하려고하는 것은 어떻습니까? 어떤 경우에는 효과가 있지만 더 많은 숫자로 작업 할 수 있습니다.

결과가 0 인 경우 콘솔 "0000"에 쓰고 싶습니까? 시도 했습니까?

Console.WriteLine(i.ToString().PadLeft(4,"0")); 

?

당신이 원하는 것이 숫자 0000을 int로 얻는 것이라면 미안하지만 그것을 얻는 방법을 모릅니다.

지금 .NET 4.0으로 이동할 수 없다면 C#의 J# 라이브러리에서 BigInteger를 사용할 수 있습니다. 다음은 방법을 설명하는 기사입니다. 배포해야 할 때 배포에 영향을 미칩니다. J# 재배치 가능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top