문제

를 추가할 때는 자리의 숫자에서 PowerShell,모든 것이 잘 정수 있는 길이-르 29.

$largeInteger = 11111111111111111111111111111 #29 digits sums correctly
$sumDigits = 0
$largeInteger
while ($largeInteger -ne 0)
{
    $sumDigits += $largeInteger  % 10
    $largeInteger  = [MATH]::Floor($largeInteger /10)   
}

$sumDigits

흥미로운 길이의 수 gt29.는 경우에는 길이가 30,합계=77.

어떤 아이디어가?

도움이 되었습니까?

해결책

Bignum 라이브러리를 설치해야합니다. 거기 있습니다 여기에 몇 가지 포인터가 있습니다. 이 bignums가 내장 된 플랫폼을 사용하십시오.

다른 팁

을 통해 비중이 처리되고 있는 특별한 경우로로 있습니다.할 수 있도 $largeInteger = [float]111111111111111111111111111111.당신은 여전히 잃게 몇 가지 정밀도를 사용하고 있습니다.

에 대한 더 많은 정보를 참조하십시오 float(C#참조)

변 largeInteger29 일부터 1 30 1 의 변경 내용 유형의 변수를 소수점에서 두 번 있습니다.사용$largeInteger.GetType()을 볼 수 있습니다.

수학에서 알고리즘을 작동하지 않도록 미세에서 두 배가 됩니다.실행은 2 선 루프에서 반복적으로 프롬프트에서 볼 수는 값에는 각 단계입니다.

한 largeInteger 에서 진수를 더블룸,산술은 정확하지 않습니다.그 이유는 내가 하나를 실행하 2 라인에 메시지를 표시합니다.

여기에 출력
PS C:>$largeInteger%[더블]10
8
PS C:>$largeInteger%[더블]100
88
PS C:>$largeInteger%[더블]1000000000000000000
1.11105501764518E+17
PS C:>$largeInteger%[더블]1000000000000000000000
1.11111105501765E+20
PS C:>$largeInteger%[더블]1000000000000000000000000000
1.11111111111104E+26
PS C:>$largeInteger%[더블]100000000000000000000000000000
1.11111111111111E+28
PS C:>$largeInteger%[더블]1000000000000000000000000000000
1.11111111111111E+29

당신이 볼 수있는 왜곡하는 발생으로 인해 내부 부정확한 표현의할 수 없는 정확하게 표현에는 이상이 필요합니다.으로 제수의 정확성을 증가 증가하고 나머지도 향상됩니다.

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