문제
를 추가할 때는 자리의 숫자에서 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
당신이 볼 수있는 왜곡하는 발생으로 인해 내부 부정확한 표현의할 수 없는 정확하게 표현에는 이상이 필요합니다.으로 제수의 정확성을 증가 증가하고 나머지도 향상됩니다.