K_func @ 2024-02-01 14:55:31
#include <bits/stdc++.h>
using namespace std;
struct Hugeint{
int len,digits[32768];
Hugeint(int x = 0){
memset(digits,0,sizeof(digits));
for(len = 1;x;len++){
digits[len] = x%10;
x/=10;
}
len--;
}
int &operator[](int i){
return digits[i];
}
void carry(int l){
len = l;
for(int i=1;i<=len;i++){
digits[i+1]+=digits[i]/10,digits[i]%=10;
}
for(;!digits[len];){
len--;
}
}
void output(){
for(int i=max(len,1);i>=1;i--){
printf("%d",digits[i]);
}
}
Hugeint operator+(Hugeint num){
Hugeint temp;
len = max(num.len,len);
for(int i=1;i<=len;i++){
temp[i]+=num[i]+digits[i];
}
temp.carry(len+1);
return temp;
}
Hugeint operator*(Hugeint num){
Hugeint tmp;
for(int i=1;i<=num.len;i++){
for(int j=1;j<=len;j++){
tmp[i+j] += num[i]*digits[j];
}
}
int lent = num.len+len;
tmp.carry(lent);
for(;lent>=1&&!tmp[lent-1];){
lent--;
}
tmp.len = lent;
return tmp;
}
};
string ca,cb;
Hugeint a,b,ans;
int main(){
cin>>ca>>cb;
for(int i=0;i<ca.size();i++){
a[i+1] = ca[i]-'0';
}
for(int i=0;i<cb.size();i++){
b[i+1] = cb[i]-'0';
}
(a*b).output();
}
by jiguanlin @ 2024-02-06 23:31:15
@ Jadejunxi 我熬夜爆肝送你高精度乘法模版,自己记好,不懂可以问我。
#include<bits/stdc++.h>
using namespace std;
string s1,s2;//定义字符串
int a[5010],b[5010],c[500010];//数组存储
int l1,l2,l;//定义变量储存长度
int main(){
cin >> s1 >> s2;//字符串输入
l1=s1.size(),l2=s2.size();//长度赋值
l=l1+l2;//总长度
for(int i=0;i<l1;i++) a[i]=s1[l1-i-1]-'0';//字符串1逆序存储到a列表
for(int i=0;i<l2;i++) b[i]=s2[l2-i-1]-'0';//字符串2逆序存储到b列表
for(int i=0;i<l1;i++){//两层循环,分别遍历a数组和b数组
for(int j=0;j<l2;j++){
c[i+j]+=a[i]*b[j];//计算当前这位
c[i+j+1]+=c[i+j]/10;//进位
c[i+j]%=10;//只保留个位
}
}
while(c[l]==0&&l!=0) l--;//去前导 0
for(int i=l;i>=0;i--) cout << c[i];//逆序输出
return 0;
}
其实我也是个蒟蒻……
私信我,交个朋友吧!
by jiguanlin @ 2024-02-06 23:32:00
这个可以AC的
by jiguanlin @ 2024-02-12 21:18:46
收到回复我一声
by jinxihexi_ @ 2024-02-14 23:22:19
@jiguanlin 为什么是5010而不是2010呢?
by jiguanlin @ 2024-02-17 21:58:10
@jinxihexi_当然2010也可以