2013-11-18 2 views
0

У меня есть простая программа, которая находит автоморфные числа до заданного числа. Проблема в том, что он просто находит число, квадратный параметр которого связан с int.Расчет длинного типа данных в C

например: 90625 x 90625 = 8212890625, но программа не может его найти.

Вопрос: В чем проблема с длинным типом здесь? Он действует как int. Есть ли приведение к int для квадратного параметра в любом месте кода?

#include <stdio.h> 
int main(void) 
{ 
    int n; 
    long i; 

    printf ("Enter a value:\n") ; 
    scanf ("%d",&n) ; 
    printf ("Automorphic numbers:\n") ; 
    for (i=1L ; i<=n ; i = i+1L) 
    { 
     long square = i*i ; 

     if (square % 10L == i || square % 100L == i || square % 1000L == i || square % 10000L == i || square % 100000L == i || square % 1000000L == i || square % 10000000L == i) 
     printf ("%li\n", i) ; 
    } 
} 
+0

Вы уверены, что 'long' - это количество бит, которое вы думаете? (по крайней мере, на вашем компьютере) –

+0

@ DennisMeng на самом деле я проверил размер длинных 4 байта:/Я думал, что это 8 байт. Итак, почему существует длинный тип в C с его 4-х байтов так же, как int? –

+0

http://stackoverflow.com/questions/18971732/difference-between-long-long-long-long-int-and-long-long-int-in-c Проверьте это для большего различия между типами int и в вашем сценарии использование long long int обязательно должно помочь! – nagraz007

ответ

1

Для 64 бит вы должны использовать long long.

EDIT: long соответствует длинному int, который может иметь тот же размер, что и int. Вы можете использовать sizeof, чтобы проверить размер.

5

C гарантирует следующие пределы (n869 C99 проект):

-- minimum value for an object of type int 
    INT_MIN      -32767 // -(215-1) 

-- maximum value for an object of type int 
    INT_MAX      +32767 // 215-1 

-- maximum value for an object of type unsigned int 
    UINT_MAX      65535 // 216-1 

-- minimum value for an object of type long int 
    LONG_MIN    -2147483647 // -(231-1) 

-- maximum value for an object of type long int 
    LONG_MAX    +2147483647 // 231-1 

-- maximum value for an object of type unsigned long int 
    ULONG_MAX    4294967295 // 232-1 

-- minimum value for an object of type long long int 
    LLONG_MIN  -9223372036854775807 // -(263-1) 

-- maximum value for an object of type long long int 
    LLONG_MAX  +9223372036854775807 // 263-1 

[5.2.4.2.1 Sizes of integer types <limits.h>] 

При необходимости определенных размеров, используйте uint64_t и подобные типы данных.

Смежные вопросы