- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分析: 首先,题目中提到,整数的长度不会超过100位,所以这些整数只能采用字符数组读入。但在对每位进行求和时,可以采用字符形式,也可以采用整数形式。 本题用整数形式处理更方便。 样例输入: 1 99999278961257987 126792340765189 998954329065419876 432906541 23 0 方法:对读入的字符数组,以逆序的方式将各字符转换成对应的数值存放到整数数组(整数数组中剩余元素的值为0),然后再以整数方式求和,最后将求和的结果以相反的顺序输出各位。 在本题中,求和时要注意以下两点: 1)计算每位和时,得到的进位可能大于1,如图7.4所示。 2)累加各大数得到的和,其位数可能会比参与运算的大数的位数还要多。稍加分析即可得出结论,如果参与求和运算的大数最大长度为maxlen,因为参加求和运算的大数个数不超过100个,所以求和结果长度不超过maxlen+2。因此求和时可以一直求和到maxlen+2位,然后去掉后面的0,再以相反的顺序输出各位整数即可。 #include stdio.h #include string.h int main( ) { char buffer[200]; //存储(以字符形式)读入的每个整数 int array[200][200]; //逆序后的大数(每位是整数形式) int answer[200]; //及求得的和 int i, j, k; //循环变量 int num_integers; //读入整数的个数 int len, maxlen; //每个整数的长度,及这些整数的最大长度 int sum, carry, digit;//每位求和运算后得到的总和, 进位, 及该位的结果 int N; //测试数据的个数 scanf( %d, N ); for( k=1; k=N; k++ ) { maxlen = -1; memset( array, 0, sizeof(array) ); memset( answer, 0, sizeof(answer) ); for( num_integers = 0; num_integers 200; num_integers++ ) { gets( buffer ); if( strcmp(buffer, 0) == 0 ) break; len = strlen(buffer); if( lenmaxlen ) maxlen = len; for( i = 0; i len; i++ )//逆序存放大数的每位(整数形式) array[num_integers][i] = buffer[len - 1 - i] - 0; } carry = 0; for( i = 0; i maxlen+2; i++ ) //对这些整数的每位进行求和 { sum = carry; for( j = 0; j num_integers; j++ ) sum += array[j][i]; digit = sum % 10; carry = sum / 10; answer[i] = digit; } for( i = maxlen+2; i = 0; i-- ) //统计求和结果的位数 { if( answer[i] != 0 ) break; } while( i = 0 ) printf( %d, answer[i--] ); //逆序输出求和结果 printf( \n ); if( kN ) printf( \n ); //两个输出块之间有一个空行 } return 0; } 7.2.2 高精度数的乘法 初等数学里乘法的运算过程,如图7.5(a)所示。该运算过程有如下特点: 多位数的乘法是转换成1位数的乘法及加法来实现的,即把第二个乘数的每位数乘以第一个乘数,把得到的中间结果累加起来。 第二个乘数的每位数进行乘法运算的中间结果,是与第二个乘数参与运算的位右对齐的。如图(a)所示,第二个程序的第2位为7,参与乘法运算得到的中间结果“8638”是和7对齐的。 在初等数学里,乘法运算得到的每个中间结果都是处理了进位的:在中间结果里,一出现进位马上累加到高一位,如图(a)中的中间结果“11106”是已经处理了进位的结果。 但是,为方便程序实现,对中间结果的进位处理更方便的做法是等全部中间结果运算完后再统一处理。如图(b)所示,每个中间结果,“6 12 18 24”、“7 14 18 24”、“8 16 24 32”、“9 18 2
您可能关注的文档
- 建筑结构试验第7章结构抗震试验重点.ppt
- 肾病的分类剖析.ppt
- 脑梗死与脑血管储备剖析.ppt
- 第03章连杆机构重点.ppt
- 脑结构与认知剖析.ppt
- 护理教学课件比赛脑梗塞的护理重点.ppt
- 肉鸡饲养管理剖析.ppt
- 流行性出血热重点.ppt
- 脑神经总论剖析.ppt
- 肉制品生产技术剖析.ppt
- 2025年市总工会党组书记、市委组织部部长生活会“四个带头”个人对照检查发言材料2篇(含上年度整改+个人情况、个人事项+典型案例).docx
- 2025年部编版小学六年级下册《道德与法治》第四单元 让世界更美好第10课 我们爱和平教学课件.pptx
- 公司领导班子2025年围绕“四个带头”主题检视问题整改落实方案与组织生活会批评意见(20条)2篇文.docx
- 教育系统党组班子2025年对照“四个带头”含意识形态、以典型案例举一反三解析检视材料【2篇文】.docx
- 2025年国有企业领导班子、学校副校长生活会“四个带头”方面对照个人检视发言材料2篇文(附:上年度整改情况、典型案例解析).docx
- 2025年生活会“四个带头”个人对照检查材料2篇文(含对其他领导批评意见,个人公开事项申报、意识形态).docx
- 2025年国有企业党委书记、领导班子生活会“四个带头”方面对照检查发言材料2篇文(上年度整改情况).docx
- 乡镇领导班子、市委组织部常务副部长2025年对照“四个带头”含违纪行为为典型案例的剖析与反思检视剖析材料{2篇文}.docx
- 市委社会工作部2025年生活会领导班子对照检视发言材料2篇文(含以案为鉴,深刻反思存在问题、反面典型案例举一反三解析、其他需要说明情况).docx
- 2025年民主生活会、组织生活会批评意见(20条)与市直单位领导班子“四个带头”对照检查材料【含上年度查摆问题整改落实情况】2篇文.docx
文档评论(0)