登录 注册

大数运算

收藏
[C++] 标签: 2013-04-24 01:41
原始代码 全屏查看 1评 / 1藏 / 5588阅  跳至 / 96行
#include<iostream>
#include<string>
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)
{
	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++)
	{
		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;
}

最新评论

  · · · · · ·  (共1条)
cottage 2013-04-24 13:09:01
虽然用不到,先收藏了 :-)
hpx 2013-04-26 17:16:33
http://bbs.csdn.net/topics/390439486?page=1#post-394326038 http://zhidao.baidu.com/question/544661553?quesup2&oldq=1 这都是改好的
hpx 2013-04-26 01:57:15
代码是有错的,我贴上来而已

共1条评论 更多评论

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