登录 注册

大数

收藏
[C++] 标签: 2013-04-28 19:18
原始代码 全屏查看 0评 / 0藏 / 5732阅  跳至 / 134行
#include<iostream>
#include<string.h>
const int N=1001;
using namespace std;

typedef struct DATA{
	int num[N];
	int sign;
	int len;
}DATA;

//将输入的char型大数数组 转化 为int型大数数组
DATA chartoint(DATA &data,char *str)
{
	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;
}

//data成员的初始化 同时 将data.num[] chartoint
void initialise(DATA &data,char* str)
{
	//对sign赋值,并去符号
	if(str[0]=='-')
	{  
		data.sign=-1;  
		int len=strlen(str);
		for( int i=0; i<len-1; i++)
			str[i]=str[i+1];
		str[len-1]='\0';
	}
	else data.sign=1;
	chartoint(data,str);

}

//翻转大数
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;
}

//比较两个大数绝对值的大小
int max(DATA data1,DATA data2)
{
	if(data1.len>data2.len) return 1;
	if(data1.len<data2.len) return 2;
	else
	{
		for(int i=0;i<data1.len;i++)
		{
			if(data1.num[i]>data2.num[i]) { return 1;break; }
			if(data1.num[i]<data2.num[i]) { return 2;break; }
			//前面两个语句都不return的话说明两个数比较的位一直相等,若最后一位相等则两数相等
            if(data1.num[data1.len-1]==data2.num[data1.len-1]) return 0;
		}
	}
}








//符号运算,只处理两数运算后的符号
//程序将两个大数之间的符号运算和数字运算分开  
void fuhao (DATA data1,DATA data2 ,char choice, int m)
{
	if(choice=='1') //加法 
	{   
		if(data1.sign>data2.sign) { if(m==2)cout<<"-"; }  //1+(-2)
		if(data1.sign<data2.sign) { if(m==1)cout<<"-"; }  //(-2)+1
		if(data1.sign==-1 && data2.sign==-1) cout<<"-";     
	}
	if(choice=='2') //减法
	{
		if(data1.sign<data2.sign) cout<<"-";
		if(data1.sign==1 && data2.sign==1) { if(m==2)cout<<"-"; }
		if(data1.sign==-1 && data2.sign==-1) { if(m==2)cout<<"-"; }//(-2)-(-1)
	}
	if(choice=='3')
	{
		if(data1.sign*data2.sign==-1)cout<<"-";
	}
}


//输出大数
//并把数字开头多余的0去掉
void output(DATA data)
{
	int i=0;
Fix:if(data.num[i]==0)
	{
		i++;
		goto Fix;
	}


	for(    ;i<data.len;i++)
		cout<<data.num[i];
	cout<<endl;
}

int main()
{
/*
    DATA data1;
	char str1[N];
	gets(str1);
	initialise(data1,str1);
	cout<<"data1.num: "<<endl;
	for(int i=0;i<data1.len;i++)
		cout<<data1.num[i];
	cout<<endl;
	cout<<"data1.len: "<<data1.len<<endl;
	cout<<"data1.sign: "<<data1.sign<<endl;
	return 0;
*/
}

最新评论

  · · · · · ·  (共0条)

目前还没有评论

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