




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一 一 C 的的 64 位整数位整数 在做 ACM 题时 经常都会遇到一些比较大的整数 而常用的内置整数类型常常显得太小了 其中 long 和 int 范围是 2 31 2 31 即 2147483648 2147483647 而 unsigned 范围是 0 2 32 即 0 4294967295 也就是说 常规的 32 位整数只能够处理 40 亿以下的数 那遇到比 40 亿要大的数怎么办呢 这时就要用到 C 的 64 位扩展了 不同的编译器对 64 位整数 的扩展有所不同 基于 ACM 的需要 下面仅介绍 VC6 0 与 g 编译器的扩展 VCVC6 0 的 64 位整数分别叫做 int64 与 unsigned int64 其范围分别是 2 63 2 63 与 0 2 64 即 9223372036854775808 9223372036854775807 与 0 18446744073709551615 约 1800 亿亿 对 64 位整数的运算与 32 位整数基本相同 都支持四 则运算与位运算等 当进行 64 位与 32 位的混合运算时 32 位整数会被隐式转换成 64 位整数 但是 VC 的输入输出与 int64 的兼容就不是很好了 如果你写下这样一段代码 1 int64 a 2 cin a 3 cout no operator defined which takes a right hand operand of type int64 or there is no acceptable conversion 的错误 在第 3 行会收 到 error C2593 operator a 3cout a 也可以使用 scanf lld printf lld a 使用无符号数时 将 lld 改成 llu 即可 最后我补充一点 作为一个特例 如果你使用的是 Dev C 的 g 编译器 它使用的是 I64d 而非 lld posted on 2006 08 16 13 40 踏雪赤兔 阅读 8408 评论 16 编辑 收藏 引用 所属分类 玩转编程 FeedBack re C 的 64 位整数 原 by 赤兔 2006 08 17 16 24 SiCheng Optimistic 受教了 怪不的 FAQs 里面直接就用了 scanf I64d printf I64d a 呵呵 所以还没试过 cout cin 用于 int64 二 二 如何在如何在 C C 中使用中使用 64 位整数类型位整数类型 ANSI C99 标准中并没有 64 位整数类型 其次 许多实际的编译器 都实现 了对 64 位整数类型的支持 其中关键是这个表格 变量定变量定 义义 输出方式输出方式 gcc mingw3gcc mingw3 2 2 g mingw3g mingw3 2 2 gcc linugcc linu x x i386 i386 g linug linu x x i386 i386 MicrosoftVisuMicrosoftVisu alal C C 6 06 0 long long lld 错误错误正确正确无法编译 long long I64d 正确正确错误错误无法编译 int6 4 lld 错误错误无法编译 无法编译 错误 int6 4 I64d 正确正确无法编译 无法编译 正确 long long cout 非 C 正确非 C 正确无法编译 int6 4 cout 非 C 正确非 C 无法编译 无法编译 long long printint64 正确正确正确正确无法编译 我们注意到 VC 6 0 对 64 位整数的支持是最少的 这是我的代码 可是总是 WA 因为这个还要算正负所以会有正负运算函数 求大神指导 C C code 1 2 3 4 5 6 7 include include using namespace std int GetLength char bool GetNum char char int int bool IsPositive char int AbsCmp int int 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 bool AddUp int int int bool void DisBuf int InBuf int main char ChBufA 10002 char ChBufB 10002 int InBufA 2002 0 int InBufB 2002 0 int InBufC 2002 0 bool PosA bool PosB bool PosC true cin ChBufA ChBufB PosA IsPositive ChBufA PosB IsPositive ChBufB GetNum ChBufA ChBufB InBufA InBufB int ABigger AbsCmp InBufA InBufB switch ABigger case 0 AddUp InBufB InBufA InBufC PosA PosB PosC PosB break case 1 AddUp InBufA InBufB InBufC PosA PosB PosC PosA break case 2 if PosA PosB PosC PosA else break if PosC cout 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 DisBuf InBufC system pause return 0 bool IsPositive char Buf if Buf return false else return true int GetLength char Buf int Length 0 if Buf 0 Buf while Buf 0 Length return Length bool GetNum char ChBufA char ChBufB int InBufA int InBufB bool PosA IsPositive ChBufA bool PosB IsPositive ChBufB int LengthA GetLength ChBufA int LengthB GetLength ChBufB int DidA 0 int DidB 0 InBufA 2001 InBufB 2001 ChBufA PosA LengthA 1 LengthA ChBufB PosB LengthB 1 LengthB for int i 0 i 2001 i int Mid 1 if DidA LengthA 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 for int j 0 j 5 j ChBufA Mid 10 if DidA LengthA break InBufA i Mid static cast ChBufA 0 DidA Mid 1 if DidB LengthB for int j 0 j 5 j ChBufB Mid 10 if DidB LengthB break InBufB i Mid static cast ChBufB 0 DidB Mid 1 return true int AbsCmp int InBufA int InBufB for int i 0 i InBufB i return 1 else if InBufA i 0 i InBufC i InBufA i InBufB i IsAdd 1 1 if InBufC i 100000 InBufC i 1 1 InBufC i 100000 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 else if InBufC i 0 InBufC i 1 1 InBufC i 100000 return true void DisBuf int InBuf int i for i 0 i 2001 i if InBuf i 0 break cout InBuf i i for i 2002 i cout setw 5 setfill 0 InBuf i cout endl C C 大数相加大数相加 include include define NUM LEN 100 int add str char pch1 char pch2 char chResult chResult NUM LEN 1 0 int idx NUM LEN 2 char pEnd1 pch1 pEnd2 pch2 for pEnd1 0 pEnd1 for pEnd2 0 pEnd2 pEnd1 pEnd2 short flag 0 是否有进位 for pEnd1 pch1 1 pEnd2 pch2 1 short b1 0 if pEnd1 pch1 1 b1 short pEnd1 short 0 0 0 pEnd1 short b2 0 if pEnd2 pch2 1 b2 short pEnd2 short 0 0 0 pEnd2 short sResult b1 b2 flag flag 0 if sResult 9 flag sResult 10 sResult 10 chResult idx char sResult short 0 if flag chResult idx flag short 0 return idx 1 int main char ch1 NUM LEN ch2 NUM LEN chResult NUM LEN printf Num1 scanf s ch1 printf nNum2 scanf s ch2 printf nNum1 s ch1 printf nNum2 s ch2 int idx add str ch1 ch2 chResult printf n 结果 s char chResult idx return 0 GMP GMP 大数库是 GNU 项目的一部分 诞生于 1991 年 作为一个任意精度的大整数 运算库 它包括了任意精度的带符号整数 有理数 浮点数的各种基本运算操作 它是一 个 c 语言的库 但是官方提供了 c 的包装类 主要的应用方向是密码学 网络安全 代 数系统 计算科学等 GMP 库的运行速度非常快的 它的官方网站上称自己为地球上最快 的大数库 但是 GMP 库所提供的只是数学运算功能 并没有密码学相关的高级功能 Miracl Miracl 库是 Shamus Software Ltd 开发的一个大数库 它的使用许可针对教 育科学研究或者非商业目的地应用是免费的 在应用上它是一个 c 语言的库 同时提供了 几个较为简单的 c 包装类 在功能上它不但提供了高精度的大整数和分数的各种数学运 算操作而且提供了很多密码学算法中的功能模块 如 SHA AES DSA 等中的一些底层 操作 最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块 由于 Miracl 库 的内部实现采用了很多的汇编层的代码 故运行速度也非常快 Crypto Crypto 库是一个开源项目 也是免费使用的 由于它是一个纯 c 实 现的库 所以应用非常的方便 库的结构清晰 使用方便 文档也很健全 Crypto 库 提供了很多密码学算法的实现 OpenSSL OpenSSL 是一个开放源代码的实现了 SSL 及相关加密技术的软件包 由加 拿大的 Eric Yang 等发起编写的 它可以实现消息摘要 文件的加密和解密 数字证书 数字签名和随机数字等 它的主要用途并不是大数库 而是 SSL 协议的实现和应用 但 是其中也有一些关于大整数的功能 此外它也是基于 c 语言 两个超大数相加 C 代码 转载自 include include using namespace std class ds public void equal string x string y int n1 int n2 void nequal string x string y int n1 int n2 private string s1 s2 void ds equal string s1 string s2 int n1 int n2 两个字符串一样长的时候 int flag 0 int i int sum 0 int k 0 int add 1000 for i 0 i 10 sum 10 flag 1 else flag 0 add i sum if flag 1 add i flag 最后加上一位进位 for i i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 象棋延时服务课件
- 2025版高新技术产业聘用员工合同协议示范文本
- 2025版企业绿色转型项目咨询与服务合同
- 2025年度礼品定制采购合同-附加礼品定制及品牌合作计划
- 2025大蒜产业链金融支持服务合同
- 2025年度农业合作社三方租地合作合同范本
- 2025版网络安全防护软件源码授权与保密协议标准范本
- 2025年度电力照明设施安全检测合同
- 2025年股权代持转让及管理服务三方合同
- 诸子论与课件
- 小学科学新教科版二年级上册全册教案(2025秋版)
- 2025年海南省通信网络技术保障中心招聘考试笔试试题(含答案)
- 2025年国家卫生健康委医药卫生科技发展研究中心招聘考试笔试试题(含答案)
- 2025至2030中国PE微粉蜡市场需求量预测及前景动态研究报告
- 2025年辅警招聘公安基础知识题库附含参考答案
- 2025年理赔专业技术职务任职资格考试(理赔员·保险基础知识)历年参考题库含答案详解(5套)
- 2025年北京标准租房合同范本下载
- 中华人民共和国治安管理处罚法2025修订版测试题及答案
- 第一单元复习与提高(单元测试)-五年级上册数学沪教版
- 2025年湖北高考历史试题(含答案解析)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
评论
0/150
提交评论