如何比较这两个ID的大小

比如
id_1 = "01223698797465646"
id_2 = "01223368956456456"
我的办法是这些数字一个一个的比较,就像strcmp()函数,我看到有人直接用atoi()或者strtol()进行比较,我想这是错误的,引文atoi(id_1)是不是得到一个负数,int不能表示这么大的数,有没有更好地解决办法呢?

阅读 6.1k
4 个回答

如果是因为ID号数字太大不能Int的话我的想法是先拆分成几段(这个ID号貌似两段就行了吧),然后再从左到右进行比较,如果A[1]>B[1],则A>B,若A[1]=B[1],则可以用递归继续判断第二段的大小~

新手上路,请多包涵

openssl提供一个大数库,可以解决你的问题。

预处理加上c99扩展

CFLAGS=-std=gnu99

这样可以在32位机器上使用strtoll函数,得到off_t类型的整数,即long long int(64位)。这个范围,够了吧。。。
函数原型是

long long strtoll(const char *restrict str, char **restrict endptr,
              int base)

不过,个人还是觉得当作字符串来处理比较省事。

如果字符串量比较大,在项目中经常需要进行此类比较的话,推荐做一下Hash,比较查找都会简单高效很多。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进