📄 fds.cpp
字号:
# include<stdio.h>
# include<malloc.h>
# include<string.h>
# define N 1000
typedef struct data
{
int dat;
struct data *next;
struct data *pre;
}dlist,*dli;
void initdlist(dli Q,int c)
{
Q->next=NULL;
Q->pre=NULL;
Q->dat=c;
}
void insertdlist(dli Q, int x)
{
dlist *p;
p=(dlist*)malloc(sizeof(dlist));
p->next=Q->next;
if(Q->next!=NULL)
Q->next->pre=p;
Q->next=p;
p->pre=Q;
p->dat=x;
}
bool getnumberdlist(dli Q,int *x)
{
dlist *r;
if(Q->next==NULL)
return false;
else
{
while(Q->next->next!=NULL)
{
Q=Q->next;
}
r=Q->next;
*x=Q->next->dat;
if(Q->next->next!=NULL)
Q->next->next->pre=Q;
Q->next=r->next;
free(r);
return true;
}
}
void delnumber(dli Q )
{
dlist *r;
r=Q->next;
if(Q->next->next!=NULL)
Q->next->next->pre=Q;
Q->next=r->next;
free(r);
}
char *rightnumber(char *num)
{
while(*num!='\0')
{
num++;
}
return num;
}//指针右移
int getmark(char *num)
{
if(*num=='-')
return -1;
else
return 1;
}
int countnum(char *num)
{
int y;
y=strlen( num);
if(*num=='-'||*num=='+')
return y-1;
else
return y;
}
int trannumber(char *num)
{
int number,i=0,t=1,r=0;
char* number1;
char n;
number1=(char *)malloc(4);
number1=rightnumber(num);
while(i<3)
{
i++;
number1--;
n=*number1;
switch(n)
{
case '0':
number=0;
break;
case '1':
number=1;
break;
case '2':
number=2;
break;
case '3':
number=3;
break;
case '4':
number=4;
break;
case '5':
number=5;
break;
case '6':
number=6;
break;
case '7':
number=7;
break;
case '8':
number=8;
break;
case '9':
number=9;
break;
default:
number=-1;
break;
}
if(number!=-1)
{
number=r+t*number;
r=number;
t*=10;
}
else
break;
}
return r;
}
void getthree(dli Q,char *num)
{
char *number,*number1;
number1=(char*)malloc(3);
unsigned int n=3;
int y,t;
y=strlen(num)%3;
if(*num=='+'||*num=='-')
y--;
if(y!=0)
t=strlen(num)+3-y;
else t=t=strlen(num);
while(n<=t)
{
number=(char*)malloc(n*3);
strncpy(number,num+strlen(num)-n,n);
strncpy(number1,number,3);
*(number1+3)='\0';
insertdlist(Q,trannumber(number1));
n+=3;
}
}
bool checkbig(dli num1,dli num2)
{
while(num1->next !=NULL)
{
if(num1->next->dat>num2->next->dat)
return true;
else if(num1->next->dat<num2->next->dat)
return false;
else
{
num1=num1->next;
num2=num2->next;
}
return true;
}
return true;
}
void addtwo(dli num1,dli num2,dli num3)
{
int y=0;
int *n1,*n2;
n1=(int *)malloc(3);
n2=(int *)malloc(3);
int sum=0;
while(num1->next!=NULL&&num2->next!=NULL)
{
getnumberdlist(num1,n1);
getnumberdlist(num2,n2);
sum=(*n1+*n2)%1000+y;
insertdlist(num3,sum);
y=(*n1+*n2+y-sum)/1000;
}
while(num1->next!=NULL||num2->next!=NULL)
{
if(getnumberdlist(num1,n1))
{
sum=(*n1+y)%1000;
insertdlist(num3,sum);
y=(*n1+y-sum)/1000;
}
else if(getnumberdlist(num2,n2))
{
sum=*n2%1000+y;
insertdlist(num3,sum);
y=(*n2+y-sum)/1000;
}
}
if(y!=0)
insertdlist(num3,y);
}
void subtwo(dli num1,dli num2,dli num3)
{
int y=0;
int *n1,*n2;
n1=(int *)malloc(3);
n2=(int *)malloc(3);
while( num1->next!=NULL&&num2->next!=NULL)
{
getnumberdlist(num1,n1);
getnumberdlist(num2,n2);
y=*n1-*n2;
if(y<0)
{
if(num1->next!=NULL)
{
while(num1->next!=NULL)
num1=num1->next;
num1->dat-=1;
y+=1000;
}
else
y=-y;
}
insertdlist(num3,y);
y=0;
while(num1->pre!=NULL)
num1=num1->pre;
}
int m;
while( num1->next!=NULL)
{
getnumberdlist(num1,n1);
m=*n1;
if(m<0)
{
if(num1->next!=NULL)
{
while(num1->next!=NULL)
num1=num1->next;
num1 ->dat-=1;
m+=1000;
}
else
m=-m;
while(num1->pre!=NULL)
num1=num1->pre;
}
insertdlist(num3,m);
}
}
int ii=0;
int fun(dli num)
{
if(num->next->dat==0&&ii==0)
return 3;
else if(num->next->dat/100!=0||ii==0)
{
ii =1;
return 0;
}
else if(num->next->dat/10!=0 )
{
ii =1;
return 1;
}
else
{
ii =1;
return 2;
}
}
void print(dli num)
{
while(num->next!=NULL)
{
switch(fun(num))
{
case 0: printf("%d",num->next->dat);
break;
case 1: printf("0%d",num->next->dat);
break;
case 2: printf("00%d",num->next->dat);
break;
case 3: printf( "");
break;
}
num=num->next;
}
}
void mainf()
{
dli number1,number2,number3;
char* num1,*num2 ;
num1=(char*)malloc(N);
num2=(char*)malloc(N);
number1=(dli)malloc(sizeof(dlist));
number2=(dli)malloc(sizeof(dlist));
number3=(dli)malloc(sizeof(dlist));
printf("请输入第一个数:");
gets(num1);
printf("请输入第二个数:");
gets(num2);
initdlist(number1,getmark(num1));
initdlist(number2,getmark(num2));
getthree(number1,num1);
getthree(number2,num2);
if(getmark(num1)==getmark(num2))
{
initdlist(number3,getmark(num2));
addtwo(number1,number2,number3);//
}
else
{
if(countnum(num1)>countnum(num2))
{
initdlist(number3,getmark(num1));
subtwo(number1,number2,number3);
}
else if(countnum(num1)<countnum(num2))
{
initdlist(number3,getmark(num2));
subtwo(number2,number1,number3);
}
else
{
if(checkbig(number1,number2))//================
{
initdlist(number3,getmark(num1));
subtwo(number1,number2,number3);
}
else
{
initdlist(number3,getmark(num2));
subtwo(number2,number1,number3);
}
}
}
printf("结果为:\n");
if(number3->dat==-1)
printf("-");
print(number3);
if(ii==0)
printf("0");
printf("\n");
}
void main()
{
while(1)
{
mainf();
ii=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -