登录 注册

大数加法_1

收藏
[C++] 标签: 2013-04-26 17:07
原始代码 全屏查看 0评 / 0藏 / 5535阅  跳至 / 81行
#include<iostream>
#include<string.h>
const int N=1000;
using namespace std;

typedef struct DATA{
	int num[1000];
	int len;
}DATA;

//翻转大数
DATA turnstr(DATA &data)
{
	int t;
	int midlen=data.len/2;
	int lastnum=data.len-1;
	for(int i=0;i<midlen;i++)
	{
		t=data.num[i];
		data.num[i]=data.num[lastnum];
		data.num[lastnum]=t;
		lastnum--;
	}
	return data;
}

//将输入的char型大数数组 转化 为int型大数数组
DATA chartoint(char *str,DATA &data)
{
	memset(data.num, 0, sizeof(data.num));//要把大于data.len的那些位置0。。
	data.len=strlen(str);
	for(int i=0;i<data.len;i++)
		data.num[i]=(int)str[i]-'0';
	return data;
}

//输出大数
void output(DATA data)
{
	for(int i=0;i<data.len;i++)
		cout<<data.num[i];
	cout<<endl;
}

//加法
DATA plus(DATA &data1,DATA &data2,DATA &data)
{
	int maxlen=(data1.len>=data2.len)?data1.len:data2.len;
	data.len=maxlen;                                  
	int add=0;
	for(int i=0;i<maxlen;i++)
	{
		//如果前边不置0,当长度不同时这里就会有问题。
		//例如1+10, 会变成x1+10, 其中x是个随机数, 所以出来的答案就错了。。
		data.num[i]=(data1.num[i]+data2.num[i]+add) %10;
		if(data1.num[i]+data2.num[i]+add >=10)
			add=1;
		else add=0;
	}

    if (add==1)   //加完最后一位还要进位的情况
	{
		data.len++;
		data.num[data.len-1]=1;
	}
	return data;
}

int main()
{
	char str1[N];
	char str2[N];
	DATA data1;
	DATA data2;
	DATA data;
	cout<<"请输入两个大数:"<<endl;
	gets(str1);
	gets(str2);
	output(turnstr( plus(turnstr(chartoint(str1,data1)),   turnstr(chartoint(str2,data2)) ,data)));
	return 0;
}

最新评论

  · · · · · ·  (共0条)

目前还没有评论

登录后您才可以发表评论。 马上登录 立即注册
hpx
2013-04-22加入
Back to Top