📄 bigno1_1.c
字号:
/*
* Copyright (c) 信息学院03计算机3班
* All rights reserved.
*
* 文件名称: bigno.c
* 文件标识: 数据结构课程设计
* 摘 要: 大数加减运算
*
* 当前版本: 1.1
* 作 者: 李南宁
* 完成日期: 2005年4月6日
* 原始版本: 1.0
* 作 者: 李南宁
* 完成日期: 2005年4月3日
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int sum1,sum2,sum,sum3,index,jud,brk,choose1;
char sign1,sign2,sign;
struct list{
char inf;
struct list *f;
struct list *r;
};
typedef struct list* number;
number num1=0,num2=0,num3;
number create(number num)
{
number p1,p2;
int i;
p1=p2=(number)malloc(sizeof(struct list));
if(1 == index&&0 == sum&&0 == sum1) printf("\n请重新输入算式:");
else if(0 == sum&&0 == sum1) printf("\n请输入算式:");
loop:p1->inf=getche();
if(p1->inf ==27) {printf("\n 谢谢使用!\n");brk=1;return;}
if(0==sum1&&0 == sum&&'-' == p1->inf) {sign1='-';goto loop;}
if(p1->inf=='+'||p1->inf=='-'||p1->inf=='='&&sum1!=0) {sign=p1->inf;return num; }
else if(p1->inf<'0'||p1->inf>'9')
{
lop: printf("\n输入错误.按r整个算式重新输入,按b退回一位输入.");
p1->inf=getche();
if('r'==p1->inf) {index=1;return p1; }
else if('b'==p1->inf ) {printf("\n继续这个算式:");
if(sum1!=0&&choose1!='c')
{ num3=num1;
for(i=0;i<sum1;i++)
{putchar(num3->r->inf);
num3=num3->r;}
putchar(sign);
num3=num;
for(i=0;i<sum;i++)
{putchar(num3->r->inf);
num3=num3->r;}
}
else
{ num3=num;
for(i=0;i<sum;i++)
{putchar(num3->r->inf);
num3=num3->r;}}
goto loop;}
else goto lop;}
sum++;
p2=p1;
if(1 == sum) {p1->f=num;p1->r=num;num=p1;num->f=num;num->r=num;}
else
{ p1->f=num;
num->r=p1;
num2=p1;
for(i=0;i<sum-1;i++)
{
num2=num2->f;}
p1->r=num2;
num2->f = p1;
num=p1;}
create(num);
}
judge()
{
number p1,p2;
int i;
p1=num1;
p2=num2;
if(sum1>sum2) {jud=1;return jud;}
else if(sum2>sum1) {jud=2;return jud;}
else
for(i=0;i<sum1;i++)
{
if(p1->r->inf>p2->r->inf ) {jud=1;return jud;}
else if(p2->r->inf>p1->r->inf ) {jud=2;return jud;}
else {p1=p1->r;p2=p2->r;}
}
if(i==sum1) {jud=0;return jud;}
}
addcompute()
{
number p1,p2,p3,p4;
int jw=0;
int m;
sum3=0;
p1=num1;
p2=num2;
p4=p3=(number)malloc(sizeof(struct list));
while(p1&&p2)
{
sum3++;
m=jw+p1->inf-'0'+p2->inf-'0';
p3->inf=m%10+'0';
if(sum3==1) num3=p3;
else {p4->f=p3;p3->r=p4;}
p4=p3;
m/=10;
if(m) jw=1;
else jw=0;
p3=(number)malloc(sizeof(struct list));
p1=p1->f;
p2=p2->f;
}
while(p1)
{ sum3++;
m=jw+p1->inf-'0';
p3->inf =m%10+'0';
p4->f=p3;p3->r=p4;p4=p3;
m/=10;
if(m) jw=1;
else jw=0;
p3=(number)malloc(sizeof(struct list));
p1=p1->f;
}
if(jw) {sum3++;p3->inf ='1';
p4->f=p3;p3->r=p4;p4=p3;
p3=(number)malloc(sizeof(struct list));
}
p4->f=num3;
num3->r=p4;
}
subcompute()
{
number p1,p2,p3,p4;
int jw=0;
int m;
sum3=0;
p1=num1;
p2=num2;
p4=p3=(number)malloc(sizeof(struct list));
while(p1&&p2)
{
sum3++;
m=p1->inf-'0'-(p2->inf-'0')-jw;
if(m<0) {jw=1;m+=10;}
else jw=0;
p3->inf=m+'0';
if(sum3==1) {num3=p3;}
else {p4->f=p3;p3->r=p4;}
p4=p3;
p3=(number)malloc(sizeof(struct list));
p1=p1->f;
p2=p2->f;
}
while(p1)
{sum3++;
m=p1->inf-'0'-jw;
if(sum3==sum1&&m==0) {sum3--;break;}
if(m<0) {jw=1;m+=10;}
else jw=0;
p3->inf=m+'0';
p4->f=p3;p3->r=p4;p4=p3;
p3=(number)malloc(sizeof(struct list));
p1=p1->f;
}
p4->f=num3;
num3->r=p4;
}
main()
{
int choose,i,temp,choose3;
number result;
while(1)
{ brk=0;
system("cls");
printf("\n\n ******************************************************\n");
printf(" 1.十进制大数运算.");
printf("(输入格式为:1+1=,或者-1-1=……)\n");
printf(" 2.退出! (如果在输入过程中要退出请按ESC键)\n");
printf(" ******************************************************\n");
printf(" 请输入:");
scanf("%d",&choose);
if (2 == choose) break;
if (1 == choose)
{index=0;
loop: sign1='+';
num1=0; num2=0; sum1=0; sum2=0; sum=0;
num1 = create(num1);
if(brk) return;
if(num1->inf == 'r') goto loop;
if(sum!=1&&num1->r->inf =='0') {printf("输入不规范!\n");goto loop;}
sum1=sum;
sum=0;
sign2=sign;
coop: num2 = create(num2);
if(brk) return;
if(num2->inf == 'r') goto loop;
if(sum!=1&&num2->r->inf =='0')
{ printf("输入不规范!\n");
result=num1;
sum=0;
for(i=0;i<sum1;i++)
{putchar(result->r->inf);
result=result->r;}
putchar(sign2);goto coop;
}
sum2=sum;
jud=judge();
if(jud==2)
{result=num1;num1=num2;num2=result;
temp=sum1;sum1=sum2;sum2=temp;
temp=sign1;sign1=sign2;sign2=temp;}
num1->r->f=0;
num2->r->f=0;
if(sign1=='+'&&sign2=='+')
{addcompute();sign='+';}
else if(sign1=='-'&&sign2=='-')
{addcompute();sign='-';}
else if(jud==0) {printf("0");getch();continue;}
else if(sign1=='-'&&sign2=='+')
{subcompute();sign='-';}
else
{subcompute();sign='+';}
if(sign=='-')
putchar(sign);
for(i=0;i<sum3;i++)
{putchar(num3->r->inf);
num3=num3->r;}
printf("\n\n按c继续上次数据运算\n按其他键回到菜单");
choose1=getche();
printf("\n\n");
if(choose1 == 'c')
{
if(sign=='-')
putchar(sign);
for(i=0;i<sum3;i++)
{putchar(num3->r->inf);
num3=num3->r;}
sign1=sign;
num1=num3;
sum1=sum3;
sum=0;
sign2=getche();
goto coop;
}
}
else {printf(" 输入错误!\n");continue;}
getch();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -