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