아래 주어진 코드는 (int
데이터 형식)으로 최대 10 자리까지 작동하지만 10 자리를 초과하는 숫자의 경우 실패했습니다. 따라서 unsigned long long int
을 시도했습니다. 하지만 지금 내 출력은 15로 고정되어, idk 왜? 나를 C로 아주 새로운 것으로 생각해 보라. 평범한 파이썬 배경을 가지고있다.10 자리 이상의 정수에서 연산 할 때 C 결과가 왜곡되는 이유는 무엇입니까?
내가 GCC를 사용하고 (~ 16.04.1 우분투 5.4.0-6ubuntu1) 당신은 잘못된 형식 지정자를 사용했습니다 5.4.0 20160609
#include <stdio.h> //Get number of digits in a int
unsigned long long int get_len();
void main() {
unsigned long long int num;
printf("Enter the number:");
scanf("%d",&num);
printf("\nThe length of number is is: %d \n",get_len(num));
}
unsigned long long int get_len(unsigned long long int z) {
unsigned long long int i = 1;
while (1) {
if ((z/10) > 1) {
//printf("Still greater than 1");
i++;
z = z/10;
continue;}
else {
return(i+1);
break;}}}
당신은 [GMPlib]와 같은 일부 [의 bignum] (https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic) 라이브러리를 (할 수 있습니다 http://gmplib.org/) –
시간을 절약하고 모든 컴파일러 경고를 활성화합니다. – chux
파이썬은 필요한 경우 자동으로 bignums로 전환하지만 C는 "금속에 더 가깝습니다"그리고 필요한 경우 특정 유형의 번호를 더 큰 번호로 승격 할 수 없습니다. 따라서 현대 컴파일러에서 64 비트 인'unsigned long long int '로 작업하도록 코드를 수정하더라도 소수점 이하 20자를 넘을 수는 없습니다. – usr2564301