- 5
- 0
- 约2.65万字
- 约 49页
- 2018-03-27 发布于浙江
- 举报
[工学]14_高精度计算new
程序设计实习(II) :算法设计
第一讲高精度计算
POJ2981大整数加法
问题描述
求两个不超过200位的非负整数的和。
输入数据
有两行,每行是一个不超过200位的非负整数,没有
多余的前导0 。
输出要求
一行,即相加后的结果。结果里不能有多余的前导0 ,
即如果结果是342 ,那么就不能输出为0342 。
输入样例
22222222222222222222
33333333333333333333
输出样例
55555555555555555555
北京大学 《程序设计实习》课程
POJ2981大整数加法解题思路
1) 用字符型或整型数组来存放大整数
an[0]存放个位数,an[1]存放十位数,an[2]存放百
位数……
2 )模拟小学生列竖式做加法,从个位开始逐位
相加,超过或达到10则进位。
用unsigned an1[201]保存第一个数,用unsigned
an2[200]表示第二个数,然后逐位相加,相加的结
果直接存放在an1中。要注意处理进位。
北京大学 《程序设计实习》课程
#include stdio.h
#include string.h
#define MAX_LEN 201
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int Add(int nMaxLen , int * an1, int * an2)
//将长度最多为nMaxLen 的大整数an1和an2 相加,结果放在an1,
//an1[0],an2[0]对应于个位
{
int nHighestPos = 0;
for(int i = 0;i nMaxLen; i ++ ) {
an1[i] += an2[i]; //逐位相加
if( an1[i] = 10 ) { //看是否要进位
an1[i] -= 10;
an1[i+1] ++; //进位
}
if( an1[i] )
nHighestPos = i; //记录最高位的位置
}
return nHighestPos;
int main() {
scanf(%s, szLine1); scanf(%s, szLine2);
int i, j;
//库函数memeset将地址an1开始的sizeof(an1)字节内容置成0
//sizeof(an1)的值就是an1 的长度
// memset函数在string.h 中声明
memset( an1, 0, sizeof(an1));
memset( an2, 0, sizeof(an2));
//下面将szLine1 中存储的字符串形式的整数转换到an1 中去,
//an1[0]对应于个位
int nLen1 = strlen( szLine1);
for(j =0, i = nLen1 - 1;i = 0 ; i --)
an1[j++] = szLine1[i] - 0;
int nLen2 =
您可能关注的文档
最近下载
- 移动通信作业及答案.pdf VIP
- 2025年湖南劳动人事职业学院高职单招笔试语文试题库含答案解析(5套共100道单选合辑).docx VIP
- 10KV与以下架空配电线路工程施工与验收-规范.pdf VIP
- 2023年4月哈尔滨市哈三中2023届高三高考三模英语试题卷及答案-(word精校版).docx VIP
- 兄弟系列一体机拆卸重组与润滑操作指南.pdf VIP
- 2026年度江苏建筑职业技术学院单招《数学》试题附完整答案详解(全优).docx VIP
- 【高考物理】回归课本:基础知识填空(含答案)8.1静电场.pdf VIP
- 2026年春季湘教版小学六年级下册信息科技教学计划含进度表.docx VIP
- PyTorch与深度学习实战-全套PPT课件.pptx
- 教科版科学四年级下册全册教学课件(2025年4月修订).ppt
原创力文档

文档评论(0)