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

📄 2.cpp

📁 高精度计算的教案和程序 完全原创
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#define MAXLEN 10000
#define BASE 10000
#define max(x,y) x>y?x:y
int x[MAXLEN/4+1],y[MAXLEN/4+1];
int ans[MAXLEN/4+1];
int lenX,lenY;
int lenAns;
FILE *in,*out;

inline void input(){
	char a[MAXLEN],b[MAXLEN];
	in=fopen("1.in","r");
	fscanf(in,"%s",a);
	fscanf(in,"%s",b);
	fclose(in);
	int lenA=strlen(a);
	int lenB=strlen(b);
	for(int i=0;i<lenA;i++)a[i]-='0';
	for(int i=0;i<lenB;i++)b[i]-='0';
	lenX=(lenA+3)/4;
	lenY=(lenB+3)/4;

	for(int i=0;i<lenX-1;i++)//代码换时间。。。。。 
		x[i]=a[lenA-4*i-1]+a[lenA-4*i-2]*10+a[lenA-4*i-3]*100+a[lenA-4*i-4]*1000;
	x[lenX-1]=a[lenA-4*lenX+3]+ 
				((lenA-4*lenX+2)>=0?a[lenA-4*lenX+2]:0)*10+
				((lenA-4*lenX+1)>=0?a[lenA-4*lenX+1]:0)*100+
				((lenA-4*lenX)>=0?a[lenA-4*lenX]:0)*1000;
	for(int i=0;i<lenY-1;i++)
		y[i]=b[lenB-4*i-1]+b[lenB-4*i-2]*10+b[lenB-4*i-3]*100+b[lenB-4*i-4]*1000;
	y[lenY-1]=b[lenB-4*lenY+3]+
				((lenB-4*lenY+2)>=0?b[lenB-4*lenY+2]:0)*10+
				((lenB-4*lenY+1)>=0?b[lenB-4*lenY+1]:0)*100+
				((lenB-4*lenY)>=0?b[lenB-4*lenY]:0)*1000;
}
inline void print(){
	out=fopen("2.out","w");
	fprintf(out,"%d",ans[lenAns-1]);
	for(int i=lenAns-2;i>=0;i--)
		fprintf(out,"%04d",ans[i]);
	fputc('\n',out);
	fclose(out);
}
//注意下面函数与1.cpp完全相同 
void add(){
	lenAns=max(lenX,lenY);
	for(int i=0;i<lenAns;i++){
		ans[i]+=x[i]+y[i];
		ans[i+1]=ans[i]/BASE;
		ans[i]%=BASE;
	}
	ans[lenAns]?lenAns++:0;
}
void min(){									//保证x>y
	lenAns=lenX;
	for(int i=0;i<lenAns;i++)
		ans[i]=(x[i]<y[i]?x[i+1]--,BASE:0)+x[i]-y[i];
	for(;ans[lenAns]==0&&ans[lenAns-1]==0;lenAns--);
}
void mul(){
	lenAns=lenX+lenY;
	for(int i=0;i<lenX;i++)
		for(int j=0;j<lenY;j++){
			ans[i+j]+=x[i]*y[j];
			ans[i+j+1]+=ans[i+j]/BASE;
			ans[i+j]%=BASE;
		}
	ans[lenAns-1]?:lenAns--;
}

int main(){
	input();
 	mul();
	//add();
	//min();
	print();

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -