社区讨论
表示被STL卡常...(是我太菜了)
P1919【模板】高精度乘法 / A*B Problem 升级版参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi6mdw5r
- 此快照首次捕获于
- 2025/11/20 07:14 4 个月前
- 此快照最后确认于
- 2025/11/20 07:14 4 个月前
要手写max()
CPP#include<cstdio>
#include<cstring>
inline int max(int a,int b) {
return a>b?a:b;
}
char str[60010];
struct BigInt {
static const int M=100005,P=100000000;
long long num[M],len;
BigInt() {
memset(num,0,sizeof num);
len=0;
}
inline void read() {
scanf("%s",&str);
len=0;
int sz=strlen(str);
for(register int i=sz-1; i>=0; i-=8) {
num[len]=0;
for(register int j=max(0,i-7); j<=i; j++) {
num[len]=(num[len]<<3)+(num[len]<<1)+(str[j]^48);
}
++len;
}
while(len>1&&!num[len-1]) --len;
}
inline void print() {
printf("%d",num[len-1]);
for(register int i=len-2; i>=0; i--) {
printf("%08lld",num[i]);
}
putchar('\n');
}
inline BigInt operator*(const BigInt& A) const {
BigInt B;
B.len=A.len+len-1;
for(register int i=0; i<len; i++) {
for(register int j=0; j<A.len; j++) {
B.num[i+j]+=num[i]*A.num[j];
if(B.num[i+j]>=P) {
B.num[i+j+1]+=B.num[i+j]/P;
B.num[i+j]%=P;
}
}
}
while(B.num[B.len]) ++B.len;
return B;
}
};
BigInt a,b;
int main() {
int n;
scanf("%d",&n);
a.read(),b.read();
a=a*b;
a.print();
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...