




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大整数加减乘除 C+版1. #include <stdio.h>2. #include <string.h>3.4. #define MAX_DIGIT 5005.6. / 大数运算:加法7. int Multiply(int *a,int *b,int *&result);8. / 大数运算:乘法9. int Add(int *a,int *b,int *&result);10. / 大数运算:减法11. int Sub(int *a,int *b,int *&result);12.13. / 逐位调整大数,如 result 为 11 9 22
2、 -3 -2 调整为 :1 0 3 9 -3,然后再对符号提升到最 高位 : 9 9 6 0 2. . -114. / 表示大数的值为 -2069915. void AjustEncodeArray(int *&result,unsigned int iMaxNum);16.17. / 输出大数18. void PrintBigNum(int *result);19.20. / 把个位在高位的字符数组转为个位在低位(下标 0)的整型数组21. void CArray2revDigitArray(char *cArray,int *DigitArray,unsigned int iNum
3、);22.22. / 大数运算:加法23. int Add(int *a,int *b,int *&result)24. 25. if(a=NULL | b=NULL | result=NULL)26. 27. printf("multiply:input errorn");28. return -1;29. 30. int i=0,j=0;31. / 初始化 result 数组32. for(i=0;i<MAX_DIGIT*2;+i)33. 34. resulti=0;35. 36. for(i=0;i<MAX_DIGIT;+i)37. 38. res
4、ulti += (ai+bi);39. 40. AjustEncodeArray(result,MAX_DIGIT*2);41. return 0;42. 44.45. / 大数运算:减法46. int Sub(int *a,int *b,int *&result)47. 48. if(a=NULL | b=NULL | result=NULL)49. 50. printf("multiply:input errorn");51. return -1;52. 53. int i=0,j=0;54. / 初始化 result 数组55. for(i=0;i<MA
5、X_DIGIT*2;+i)56. 57. resulti=0;58. 59. for(i=0;i<MAX_DIGIT;+i)60. 61. resulti += (ai-bi); /result 里可以为负数62. 63. AjustEncodeArray(result,MAX_DIGIT*2);64. return 0;65. 66.67. / 大数乘法68. int Multiply(int *a,int *b,int *&result)69. 70. if(a=NULL | b=NULL | result=NULL)71. 72. printf("multiply
6、:input errorn");73. return -1;74. 75. int i=0,j=0;76. / 初始化 result 数组77. for(i=0;i<MAX_DIGIT*2;+i)78. 79. resulti=0;80. 81. /a0 为个位起算 ,结果的偏移位为 i+j,82. / 如个位 *十位,则运算结果的偏移为0+1即 183. / 例子:a0为 9, b1为 7,则 result1加 6384. for(i=0;i<MAX_DIGIT;+i)85. 86. for(j=0;j<MAX_DIGIT;+j)87.88. resulti+j
7、+= ai*bj;89. 90. 91. AjustEncodeArray(result,MAX_DIGIT*2);92. return 0;93. 94.95.96. / 逐位调整大数,如 result 为 11 9 22 -3 -2 调整为 :1 0 3 9 -3,然后再对符号提升到最 高位 : 9 9 6 0 2. . -197. / 表示大数的值为 -2069998. void AjustEncodeArray(int *&result,unsigned int iMaxNum)99. 100. int i = 0;101. unsigned int iNumFlag = 0;
8、102. unsigned int iWeight = 0;/有效最高位的权值103. / 遍历找出有效数据的最高位的下标 (正负都有可能 )104. for(i=iMaxNum-1;i>=0;-i)105. 106. if(resulti!=0)107. 108. iNumFlag=i;109. break;110. 111. 112. /从低位开始往上调整,规则:大于 10 的正数要进位,负数要借位113. for(i=0;i<iNumFlag;+i)114. 115. / 进位116. if(resulti>0)117. 118. resulti+1 += result
9、i/10;/十位以上都要进位119. resulti = resulti%10;/调/ 整进位后的当前位120. 121. else if(resulti<0)122. 123.resulti+1 -= 1; /忽略高位是否可借位,强行借位124. resulti = 10+resulti;125. 126. 127. / 若有效最高位为负数,需要对负号进行提升,就是对高位与余下低位进行一次减法128. if(resultiNumFlag<0)129.130.131.132.133.134.135.136.137.138.139.140.141.142.143.144.145.14
10、6.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.iWeight = -resultiNumFlag;int iMinuend2*MAX_DIGIT=0; iMinuendiNumFlag = iWeight;/被减数resultiNumFlag = 0;/构/ 造减数for(i=0;i<iNumFlag+1;+i)resulti = (iMinuendi-resulti);/调整借位for(i=0;i<iNumFlag;
11、+i)if(resulti<0)resulti+1 -= 1; resulti = 10+resulti;resultiMaxNum-1 = -1;void PrintBigNum(int *result)int index = MAX_DIGIT*2-1;bool bNegative = false;/ 从最高位找到第一个不为负的位,从此位开始为有效值while(resultindex<=0)if(resultindex<0)bNegative = true;index-;if(bNegative)printf("-");for(int i=index;
12、i>=0;-i)printf("%d",resulti);printf("n");173. 174.175. void CArray2revDigitArray(char *cArray,int *DigitArray,unsigned int iNum)176. 177. int i = 0;178. unsigned int iLen = strlen(cArray);179. / 初始化 DigitArray180. for(i=0; i<iNum; +i)181. 182. DigitArrayi = 0;183. 184. for(
13、i=0; i<iLen; +i)185. 186. DigitArrayiLen-1-i = cArrayi-'0'187. 188. 189.190. int main()191. 192. int aMAX_DIGIT,bMAX_DIGIT,resultArray2*MAX_DIGIT;193. char cArray1MAX_DIGIT,cArray2MAX_DIGIT;194. int ret = 0;195. int *result = (int *)resultArray;196. printf("Input multiplier:n");
14、197. scanf("%s",cArray1);198. printf("Input multiplicand:n");199. scanf("%s",cArray2);200. CArray2revDigitArray(cArray1,a,MAX_DIGIT);201. CArray2revDigitArray(cArray2,b,MAX_DIGIT);202. ret=Multiply(a,b,result);203. if(ret!=0)204. 205. printf("Multiply error,ret:%dn",ret);206. return -1;207. 208. PrintBigNum(result);209.210. ret=Add(a,b,result);211. if(ret!=0)212. 213. printf("Multiply error,r
温馨提示
- 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年农业农村科技基础知识考试题库(附含答案)
- 合同第三方见证人范本
- 学生心理健康教育干预措施
- DB32∕T 4652-2024 基于区块链技术的多中心药物临床试验管理系统开发指南
- 实验室生物安全知识培训考试试题(含答案)
- 高渗盐水治疗脑水肿及颅内高压专家共识解读
- T-SCSTA001-2025《四川省好住房评价标准》
评论
0/150
提交评论