C中的长数据类型计算

时间:2013-11-18 23:58:31

标签: c

我有一个简单的程序,可以找到自动数字达到给定数字。问题是它只是找到了square参数绑定的数字。

例如:90625 x 90625 = 8212890625但是程序找不到它。

问题:这里的长型有什么问题?它就像int一样。在代码的任何地方都有一个转换为int的square参数吗?

#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) ;
   }
}

2 个答案:

答案 0 :(得分: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和类似的数据类型。

答案 1 :(得分:1)

对于64位,您应使用long long

编辑:long对应于long int,它可以与int具有相同的大小。您可以使用sizeof来检查所拍摄的尺寸。