#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;
*/
}