C++实现大数的加法
来源:互联网 发布:c 编程实战宝典 pdf 编辑:程序博客网 时间:2024/05/16 23:52
加法计算还是比较容易的,我们也是先从低位算起,因为只须要对应的位相加,再加上前一位的进位,再去判断是否本位是否有进位, 有则把本位数字改为减去它的权,也就是10,再置进位为1。如果没有进位,则给进位赋值0。
在程序时应注意:
1、两个加数中那一个数的位数长,以位数长的作为循环变量;
2、结束循环时,不仅仅是最后一位加完就停止,还应加入如果有进位,也要再循环一次。如最后一位是9,进位是1,则相加时进位,要加上进位这一位值。具体看代码,输入输出时和乘法的一样。
//没有考虑相加的数中有负数的情况,只考虑了两个数都是正数
#include<iostream>using namespace std;
void addition(char* num1,char* num2,char* result,int num1length,int num2length,int resultindex)
{
int flag=0;//标志进位
int index=0;
while(num1length>=0&&num2length>=0)
{
int nsum=num1[num1length]-'0'+num2[num2length]-'0'+flag;
flag=nsum/10;//判断是不是有进位
nsum%=10;//如果有进位制,则要求出进位后余下的值
result[resultindex--]=nsum+'0';
num1length--;
num2length--;
}
if(num1length<0)
{
while(num2length>=0)
{
int nsum=num2[num2length]-'0'+flag;
flag=nsum/10;
nsum%=10;
result[resultindex--]=nsum+'0';
num2length--;
}
}
if(num2length<0)
{
while(num1length>=0)
{
int nsum=num1[num1length]-'0'+flag;
flag=nsum/10;
nsum%=10;
result[resultindex--]=nsum+'0';
num1length--;
}
}
if(flag!=0)
{
result[resultindex]=flag+'0';
}
}
void print(char*num,int nlength)
{
bool isbegining=true;
for(int i=0;i<nlength;i++)
{
if(num[i]!='\0')
{
if(isbegining&&num[i]!='0')//因为之前预留了空位,所以位数不够nlength位,之前为0,为了符合打印习惯,从左往右找到第一个非‘0’的值
isbegining=false;
if(!isbegining)
cout<<num[i];
}
}
cout<<endl;
}
int main()
{
char num1[]="123456";
char num2[]="123";
int num1length=strlen(num1)-1;//数组是从0开始
int num2length=strlen(num2)-1;//数组是从0开始
int maxlength=(num1length>num2length)? num1length:num2length;
int resultlength=maxlength+10;
int resultindex=resultlength;//用于addition函数中数组result的标号
char* result=new char[resultlength];
memset(result,'0',resultlength-2);//减2是因为数组是从0开始,数组最后一位放置结束符。结果数组清0,调用了memset函数,注意是赋值‘0’而不是0,否则出错
result[resultlength-1]='\0';//数组添加结束符
resultindex--;//减掉一位,因为最后一位不放任何内容,只放结束符
addition(num1,num2,result,num1length,num2length,resultindex);
print(result,resultlength);
delete [] result;
return 0;
}
0 0
- 大数加法的实现
- C++实现大数的加法
- 大数加法的字符串实现
- 大数加法和大数乘法的实现
- 大数运算-加法(C/C++实现)
- C语言 加法 大数加法
- C#,关于大数之间的加法
- C语言基础篇:大数的加法
- 大数的加法,乘法,全排列实现
- 大数加法模板(c++)
- C语言大数加法
- 大数加法(C语言)
- 大数 加法 c语言
- C语言大数加法
- C语言大数加法
- c语言大数加法
- C语言-大数加法
- 大数乘法、大数加法实现
- ios 代码 自动布局(一)
- 重拾linux 驱动 2----在dev 文件下显示驱动名字
- 用HOSTS文件屏蔽网站
- Fitnesse使用系列三
- 螺旋矩阵
- C++实现大数的加法
- 使用gdb调试段错误(segment fault)
- poj3624Charm Bracelet
- C++实现大数的减法
- tomcat源码分析学习笔记(一)
- C++实现大数的乘法
- 排序----堆排序
- 安装VMware提示低版本未未卸载,无法卸载无法继续安装的解决方案
- 有米传媒2014前端笔试题