[工学]14_高精度计算new.pdfVIP

  • 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 =

文档评论(0)

1亿VIP精品文档

相关文档