大数相加
2016-05-17 20:38
211 查看
#include<iostream>
#include<string.h>
#define Max 201
using namespace std;
void print(char sum[])
{
int i=0;
int j=0;
int len = strlen(sum);
for (i=len-1;sum[i]==0;i--); //找到第一个不为零的位置,方便输出
for (j=i;j>=0;j--)
{
cout<<sum[j];
}
cout<<endl;
}
void bigNumAdd(char a[],char b[],char sum[])
{
int i=0;
int c=0;//表示进位
//初始化,对以后位运算有很大帮助!
char m[Max]={0};
char n[Max]={0};
memset(sum,0,Max*sizeof(char)); //这里不能写成memset(sum,0,sizeof(sum));原因见注意事项1
//字符串反转且字符串变数字
int lenA=strlen(a);
int lenB=strlen(b);
for (i=0;i<lenA;i++)
{
m[i]=a[lenA-i-1]-'0';
}
for (i=0;i<lenB;i++)
{
n[i]=b[lenB-i-1]-'0';
}
//位运算
for (i=0;i<lenA||i<lenB;i++)
{
sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位
c=(m[i]+n[i]+c)/10;//得到进位
}
}
int main()
{
char a[Max];
char b[Max];
char sum[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
bigNumAdd(a,b,sum);
cout<<"结果:"<<endl;
print(sum);
return 0;
}
/*#include<iostream>
#include<string.h>
#define Max 201
using namespace std;
void printRes(char r[])
{
int i=0,j=0;
int len=strlen(r);
for(i=len-1;r[i]==0;i--);
for(j=i;j>=0;j--)
{
cout<<r[i];
}
cout<<endl;
}
void Add(char a[],char b[],char r[])
{
int i=0;
int j=0;
char m[Max]={0};
char n[Max]={0};
memset(r,0,Max*sizeof(char));
int lenA=strlen(a);
int lenB=strlen(b);
for(i=0;i<lenA;i++)
{
m[i]=m[lenA-i-1]-'0';
}
for(i=0;i<lenB;i++)
{
n[i]=n[lenA-i-1]-'0';
}
for(i=0;i<lenA||i<lenB;i++)
{
r[i]=(m[i]+n[i]+j)%10+'0';
j=(m[i]+n[i]+j)/10;
}
}
int main()
{
char a[Max];
char b[Max];
char r[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
Add(a,b,r);
cout<<"结果:"<<endl;
printRes(r);
return 0;
}*/
#include<string.h>
#define Max 201
using namespace std;
void print(char sum[])
{
int i=0;
int j=0;
int len = strlen(sum);
for (i=len-1;sum[i]==0;i--); //找到第一个不为零的位置,方便输出
for (j=i;j>=0;j--)
{
cout<<sum[j];
}
cout<<endl;
}
void bigNumAdd(char a[],char b[],char sum[])
{
int i=0;
int c=0;//表示进位
//初始化,对以后位运算有很大帮助!
char m[Max]={0};
char n[Max]={0};
memset(sum,0,Max*sizeof(char)); //这里不能写成memset(sum,0,sizeof(sum));原因见注意事项1
//字符串反转且字符串变数字
int lenA=strlen(a);
int lenB=strlen(b);
for (i=0;i<lenA;i++)
{
m[i]=a[lenA-i-1]-'0';
}
for (i=0;i<lenB;i++)
{
n[i]=b[lenB-i-1]-'0';
}
//位运算
for (i=0;i<lenA||i<lenB;i++)
{
sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位
c=(m[i]+n[i]+c)/10;//得到进位
}
}
int main()
{
char a[Max];
char b[Max];
char sum[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
bigNumAdd(a,b,sum);
cout<<"结果:"<<endl;
print(sum);
return 0;
}
/*#include<iostream>
#include<string.h>
#define Max 201
using namespace std;
void printRes(char r[])
{
int i=0,j=0;
int len=strlen(r);
for(i=len-1;r[i]==0;i--);
for(j=i;j>=0;j--)
{
cout<<r[i];
}
cout<<endl;
}
void Add(char a[],char b[],char r[])
{
int i=0;
int j=0;
char m[Max]={0};
char n[Max]={0};
memset(r,0,Max*sizeof(char));
int lenA=strlen(a);
int lenB=strlen(b);
for(i=0;i<lenA;i++)
{
m[i]=m[lenA-i-1]-'0';
}
for(i=0;i<lenB;i++)
{
n[i]=n[lenA-i-1]-'0';
}
for(i=0;i<lenA||i<lenB;i++)
{
r[i]=(m[i]+n[i]+j)%10+'0';
j=(m[i]+n[i]+j)/10;
}
}
int main()
{
char a[Max];
char b[Max];
char r[Max];
cout<<"请输入a:"<<endl;
gets(a);
cout<<"请输入b:"<<endl;
gets(b);
Add(a,b,r);
cout<<"结果:"<<endl;
printRes(r);
return 0;
}*/
相关文章推荐
- bash 复合命令
- Spark中组件Mllib的学习9之ALS训练的model来预测数据的准确率研究
- JAVA遍历二叉树
- HDU 1286(欧拉函数||筛选法)
- 通过构造函数创建的对象的原型指向构造函数的prototype属性
- appache ab测试高并发
- 数据库——范式
- 网页设计代码总结-----布局(1)
- 多态和友元
- 汇总一些本人在开发中比较常用的开源库
- android视频播放
- 51nod 1189 阶乘分数(分解质因数)
- centos6.6下openoffice安装过程
- JDK7的Comparison method violates its general contract异常
- Java面向对象之接口
- hdu 3339(最短路+01背包)
- C++课程 second work _1025
- Java第八天听课总结--jar 包的使用(1)
- [置顶] 作品展示
- iOS - 报错 The dependency `xxx` is not used in any concrete target