第十五节 机试题之大整数加法运算
来源:互联网 发布:cmd怎么测试端口 编辑:程序博客网 时间:2024/06/02 01:58
第十五节 机试题之大整数加法运算
所接触的数据类型中,int数据类型、float数据类型等都有范围,如果超出这个范围,则无法表达,更不能进行数学中的运算。但是字符串的长度却不受限制,但是要让字符串进行数学运算也就解决了大整数的运算。
这样的话,可以联想到小学的竖式加减乘除的方法,逐位相加减。
大整数的加法算法:
/****************************************************************
** 函数名称:BigNumberAdd
** 函数功能:大整数的加法运算
** 入口参数:str1:第一个加数
str2:第二个加数
ptr:容纳两数之和的空间首地址
ptrSize:此空间大小
** 出口参数:
****************************************************************/
int BigNumberAdd(const char *str1, const char *str2,
char *ptr, int ptrSize)
{
/*
** iStr1Len:存储第一个字符串
** iStr2Len:存储第二个字符串
** iMaxLen : 两个字符串中最长的长度
** i、j : 循环
** iCarry : 进位标志位
*/
int iStr1Len , iStr2Len , iMaxLen , i , j , iCarry = 0 ;
char character1 , character2 ;
/* 测量两个字符串长度¨¨ */
iStr1Len = strlen(str1) ;
iStr2Len = strlen(str2) ;
/* 将ptr存储区域的数据全部清零 */
memset(ptr, 0, ptrSize) ;
/* 得到两个加数中最大的长度¨¨ */
iMaxLen = iStr1Len > iStr2Len ? iStr1Len : iStr2Len ;
/* 从低位向高位逐位相加 */
for ( i = 0 ; i < iMaxLen ; i++ ) {
character1 = \
(iStr1Len - 1 - i) < 0 ? '0' : str1[iStr1Len - 1 - i] ;
character2 = \
(iStr2Len - 1 - i) < 0 ? '0' : str2[iStr2Len - 1 - i] ;
/* 如果character1和character2不是数字,则退出 */
if ( (!isdigit(character1)) || (!isdigit(character2)) ) {
return 0 ;
}
/* 模仿竖式逐位相加 */
iCarry += (character1 - '0') + (character2 - '0') ;
assert(i < ptrSize) ;
/* 保存当前位数据 */
ptr = iCarry % 10 + '0' ;
/* 保存进位数据 */
iCarry /= 10 ;
}
/* 如果最高位出现进位,则增加一位 */
if (0 != iCarry) {
assert(i < ptrSize) ;
ptr[i++] = iCarry + '0' ;
}
assert(i < ptrSize) ;
ptr = '\0' ;
/* 将数字逆序输出 */
for ( j = 0 ; j < --i ; j++) {
char cTemp = ptr[j] ;
ptr[j] = ptr ;
ptr = cTemp ;
}
return 1 ;
}
大整数的减法、乘法、除法运算都可依据小学的竖式运算方法。测试结果:
数据一:987654321123456789
数据二:123456789987654321
两数相加之和:1111111111111111110
两数相加之差:864197531135802468
两数相加之积:120408474453741807546258192212924859
请按任意键继续. . .
- 第十五节 机试题之大整数加法运算
- 大整数运算之 大整数加法、减法、乘法
- 大整数运算(加法)
- 大整数运算(加法)
- 大整数的加法运算
- 11.用链表模拟大整数加法运算
- c语言高精度大整数加法运算
- 用链表模拟大整数加法运算
- 大整数的加法和乘法运算
- Problem B: 大整数的加法运算
- Problem I: 大整数的加法运算
- Problem A: 大整数的加法运算
- 面试题~位运算实现两个整数的加法
- 大非负整数加法运算
- 整数的加法运算
- Java 实现大整数加法、乘法、阶乘运算
- C++ std::list实现大整数加法运算
- 大精度整数三种运算(加法,减法,乘法)
- 第十二节 机试题目之十进制1~N的所有整数中出现“1”的个数
- 第十三节 机试题之 遍历单链表一次,找出链表中间元素
- 第十四节 机试题之全排序
- DTU基础知识普及手册
- 软件设计,全心全意保护用户数据
- 第十五节 机试题之大整数加法运算
- 第十六节 机试题之大整数减法与乘法
- 面向对象设计原则
- BCD来调试的批处理
- Android常用的工具类
- java的类问题!
- 第十七节 算法之二分查找
- 通过串口编程实现GPRS模块在网络上传输数据
- 第十八节 数据结构之单向链表