我有一个简单的程序,可以找到自动数字达到给定数字。问题是它只是找到了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) ;
}
}
答案 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
来检查所拍摄的尺寸。