📄 1.cpp
字号:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#define LEN sizeof(struct Data)
#define NULL 0
//结点结构
struct Data
{
long int Bit;
int Count;
struct Data *Next;
};
//计算读入的数据的长度,构建链表
void CreatNode(struct Data *Head,char NUM[50])
{
struct Data *Temp=NULL,*P=NULL;
int i,j,VAR;
char ch;
P=Head;
Head->Count=strlen(NUM);
//字符串倒置
for(i=0,j=Head->Count-1;i<j;i++,j--)
{
ch=NUM[i];
NUM[i]=NUM[j];
NUM[j]=ch;
}
if(Head->Count%2==1)
{
NUM[strlen(NUM)]='0';
NUM[strlen(NUM)+1]='\0';
}
for(i=0,j=0;i<((Head->Count/2)+(Head->Count%2));i++)
{
VAR=(NUM[j]-48)+(NUM[j+1]-48)*10;
Temp=(struct Data *)malloc(LEN);
P->Next=Temp;
Temp->Bit=VAR;
Temp->Next=NULL;
P=Temp;
j=j+2;
}
}
struct Data *Link_Add(struct Data *Head1,struct Data *Head2)
{
int c,d=0;
struct Data *Temp1=NULL,*Temp2=NULL;
struct Data *Temp=NULL,*P=NULL;
struct Data *Result;
Result=(struct Data *)malloc(LEN);
Result->Count=0;
Temp=(struct Data *)malloc(LEN);
Result->Next=Temp;
Temp->Bit=-2;
Temp->Next=NULL;
Temp1=Head1;
Temp1=Temp1->Next;
Temp2=Head2;
Temp2=Temp2->Next;
while(Temp1!=NULL&&Temp2!=NULL)
{
P=Result;
P=P->Next;
Temp=(struct Data *)malloc(LEN);
c=Temp2->Bit+Temp1->Bit+d;
Temp->Bit=c%100;
Result->Next=Temp;
Temp->Next=P;
Result->Count++;
d= c/100;
if(Temp2->Next==NULL&&Temp1->Next==NULL&&d!=0)
{
P=Result;
P=P->Next;
Temp=(struct Data *)malloc(LEN);
Result->Next=Temp;
Temp->Bit=d;
Temp->Next=P;
Result->Count++;
}
if(Temp1->Next!=NULL&&Temp2->Next==NULL)
{
Temp=(struct Data *)malloc(LEN);
Temp2->Next=Temp;
Temp->Bit=0;
Temp->Next=NULL;
}
if(Temp1->Next!=NULL&&Temp2->Next==NULL)
{
Temp=(struct Data *)malloc(LEN);
Temp1->Next=Temp;
Temp->Bit=0;
Temp->Next=NULL;
}
Temp1=Temp1->Next;
Temp2=Temp2->Next;
}
return Result;
}
void main()
{
char NUM_1[50];
char NUM_2[50];
char a[20],ch;
int i=0;
FILE *fp;
struct Data *Head1=NULL;
struct Data *Head2=NULL;
struct Data *Head3=NULL;
struct Data *Temp=NULL;
printf("Input the file's name!\n");
scanf("%s",a);
//---------------文件读入----------------
if((fp=fopen(a,"rt+"))==NULL)
{
printf("error on open file %s.\n",a);
exit(0);
}
while(NUM_1[i]!='\0')
{
ch=fgetc(fp);
if(ch=='+')
{
NUM_1[i]='\0';
break;
}
NUM_1[i]=ch;
i++;
}
i=0;
while((ch=fgetc(fp))!=EOF)
{
NUM_2[i]=ch;
i++;
}
NUM_2[i]='\0';
Head1=(struct Data *)malloc(LEN);
Head2=(struct Data *)malloc(LEN);
Head3=(struct Data *)malloc(LEN);
Head1->Bit=-1;
Head2->Bit=-1;
Head1->Next=NULL;
Head2->Next=NULL;
CreatNode(Head1,NUM_1);
CreatNode(Head2,NUM_2);
Head3=Link_Add(Head1,Head2); // 核心加法函数
Temp=Head3;
Temp=Temp->Next;
fprintf(fp,"=");
fprintf(fp,"%ld",Temp->Bit);
Temp=Temp->Next;
for(i=0;i<Head3->Count-1;i++)
{
fprintf(fp,"%02ld",Temp->Bit);
Temp=Temp->Next;
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -