📄 2.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 + -