⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 大数运算...可以让任意的数字进行加法运算 ... 还有乘法程序 想要的可以+q 89179414
💻 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 + -