Dream__Sky @ 2024-03-23 13:21:41
rt
谢谢
by jung_le666 @ 2024-03-23 13:36:13
#include<bits/stdc++.h>
using namespace std;
struct bignum{
char s[20000];
int num[20000];
int len,flag;
bignum(){
memset(num,0,sizeof(num));
len=1;
flag=0;
}
bignum(int x){
for(len=1;x;len++){
num[len]=x%10;
x/=10;
}
len--;
}
int &operator[](int i){
return num[i];
}
friend bool operator <(bignum a,bignum b){
if(a.len != b.len){
return a.len<b.len;
}
for(int i=a.len;i>=1;i--){
if(a[i]<b[i])return true;
if(a[i]>b[i])return false;
}
return false;
}
void input(){
scanf("%s",s+1);
len = strlen(s+1);
for(int i=1;i<=len;i++)
num[i] = s[len-i+1]-'0';
}
void print(){
if(flag)cout<<'-';
for(int i=len;i>=1;i--)cout<<num[i];
}
};
bignum operator+(bignum a,bignum b){
bignum ans;
ans.len = max(a.len,b.len);
for(int i=1;i<=ans.len;i++){
ans[i] += a[i]+b[i];
if(ans[i] >= 10){
ans[i+1]++;
ans[i]-=10;
}
}
if(ans[ans.len + 1]){
ans.len++;
}
return ans;
}
bignum operator-(bignum a,bignum b){
bignum ans;
if(a<b){
ans.flag=1;
swap(a,b);
}
ans.len = a.len;
for(int i=1;i<=ans.len;i++){
ans[i] += a[i]-b[i];
if(ans[i] < 0){
ans[i+1]--;
ans[i]+=10;
}
}
while(ans.len > 1 && ans[ans.len +1]==0)ans.len--;
return ans;
}
bignum operator*(bignum a,bignum b){
bignum ans;
ans.len = a.len+b.len;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++)
ans[i+j-1] += a[i]*b[i];
}
for(int i=1;i<=ans.len;i++){
if(ans[i]>=10){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
while(ans.len > 1 && ans[ans.len]==0)ans.len--;
return ans;
}
//除法反正用不到(
int main(){
bignum a;
a.input();
a.print();
return 0;
}
供参考(结构体型)
by Guo1 @ 2024-03-23 13:44:52
A+B高精那题,有一个题解就是把加减乘除都谢了
by Oct_ @ 2024-03-23 15:42:13
我的高精度模板