洛必达法则 @ 2024-09-08 11:59:47
const int Base=1000000000;//进位制
const int Width=9;//每一位的输出宽度
vector<int> arr;//按位数值阵列
BigNum(long long num=0) {*this=num;}//构造函数
BigNum operator * (BigNum& B)//乘法
{
BigNum x;
x.arr.clear();
long long g(0);
for(long long i=0;;i++)
{
if(i>=this->size()&&i>=B.size()) break;
long long opt=1;
if(i<this->size()) opt*=arr[i];
if(i<B.size()) opt*=B.arr[i];
opt+=g;//包含进位数目
x.arr.push_back(opt%Base);//录入
g=opt/Base;//记录进位数目
}
while(g!=0)
{
x.arr.push_back(g%Base);
g/=Base;
}
return x;
}
BigNum operator *= (BigNum& B)//累乘
{
*this=*this*B;
return *this;
}
rt
by 洛必达法则 @ 2024-09-08 12:00:27
有省略,只保留核心部分
by BJ_BSGF_Lyc @ 2024-09-08 12:11:55
减 ASCII 差值即可:
int init(int a[],string &s){
cin>>s;
int len=s.size();
for(int i=0;i<len;i++) a[i]=s[len-1-i]-'0';
return len;
} //主要运算函数
int lenA,lenB,lenC;
void Mul(){
for(int i=0;i<lenB;i++){
int m=0;
for(int j=0;j<lenA;j++){
C[i+j]=A[j]*B[i]+m+C[i+j];
m=C[i+j]/10;
C[i+j]=C[i+j]%10;
}
C[lenA+i]=m;
}
} //位值原理,除位迭代
int main(){
lenA=init(A,s1);
lenB=init(B,s2);
int lenC=lenA+lenB;
Mul();
while(C[lenC]==0&&lenC>0)
lenC--;
for(int i=lenC;i>=0;i--)
cout<<C[i];
return 0; //收工
}
by BJ_BSGF_Lyc @ 2024-09-08 12:12:21
@洛必达法则 pls 壶关 QAQ。
by atcoder001 @ 2024-09-08 12:37:26
qp
by 洛必达法则 @ 2024-09-08 13:03:24
@BJ_BSGF_Lyc ??哪有ascii差值
by BJ_BSGF_Lyc @ 2024-09-08 13:04:35
@洛必达法则 哦哦,就是位值原理+强转(sorry)
by 洛必达法则 @ 2024-09-08 13:05:47
哦哦哦哦才发现我错得离谱QAQ 太感谢了
by BJ_BSGF_Lyc @ 2024-09-08 13:06:25
@洛必达法则 你这个写法我头一次见,不过先%%%%%%
by BJ_BSGF_Lyc @ 2024-09-08 13:07:12
@洛必达法则 已互