高精度,RE求助qwq
查看原帖
高精度,RE求助qwq
871053
Krampus楼主2023/8/1 15:55

所有样例全部RE了
但是能过样例,高精乘和高精除自测没有问题
下了第一个点,在自己的IDE上测试可过
应该不会有数组越界,不太清楚为啥都RE
qwq

#include<bits/stdc++.h> 

#define endl "\n"
using namespace std;
typedef long long ll ;

ll t,n,k;
typedef struct{
	char sa[4005];
	char sb[4005];
}Node;

Node arr[1001];
char * pro;
int a[205];
int b[205];

char * mul(char A[],char B[])
{
	int c[205];
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	char res[205];
    int lena = strlen(A);
    int lenb = strlen(B);
    int len = lena + lenb;
    for (int i = lena - 1; i >= 0; i--){
    	a[lena - i] = A[i] - '0';
	}
    for (int i = lenb - 1; i >= 0; i--){
    	b[lenb - i] = B[i] - '0';
	}
    for (int i = 1; i <= lena; i++){
    	for (int j = 1; j <= lenb; j++){
    		c[i + j - 1] += a[i] * b[j];
		}
	}
    for (int i = 1; i <= len; i++){
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
    while(c[len]==0&&len!=0){
    	len--;
	}
	if(len==0){
		res[0]='0';
		res[1]='\0';
	}else{
		for(int i=len;i>=1;i--){
			res[len-i]=c[i]+'0';
		}
		res[len]='\0';
	}
    return &res[0];
}

char * div(char s[],ll b)
{
     int lena = strlen(s);
     int c[205];
     memset(a,0,sizeof(a));
     memset(c,0,sizeof(c));
     ll x=0;
     char res[205];
     for (int i = 1; i <= lena; i++){
     	a[i] = s[i - 1] - '0';
	 }
     for (int i = 1; i <= lena; i++){
         c[i] = (x * 10 + a[i]) / b;
         x = (x * 10 + a[i]) % b;
     }
     int lenc = 1;
     while (c[lenc] == 0 && lenc<lena){
     	lenc++; 
	 }
     for (int i = lenc; i <= lena; i++){
     	res[i-lenc]=c[i]+'0';
	 }
	 res[lena-lenc+1]='\0';
	 return &res[0];
}

bool cmp(Node a,Node b)
{
	return atoi(mul(a.sa,a.sb))<atoi(mul(b.sa,b.sb));
}

int main()
{
	ios::sync_with_stdio(false);
    int i,j;
    char king1[205];
    char  res[205];
    char str[205];
    char * ans;
    cin>>n;
    ll l=0,temp;
    cin>>king1>>temp;
    for(i=0;i<=n-1;i++){
    	cin>>arr[i].sa>>arr[i].sb;
	}
	sort(arr,arr+n,cmp);
	res[0]='0';res[1]='\0';
	str[0]='0';str[1]='\0';
	ans=&str[0];
	res[0]='1';
	pro=mul(res,king1);
	for(i=0;i<=n-1;i++){
		temp=atoi(div(pro,atoi(arr[i].sb)));
		if(atoi(ans)<temp){
			ans=div(pro,atoi(arr[i].sb));
		}
        pro=mul(pro,arr[i].sa);
	}
	cout<<ans<<endl;
	return 0;
}
2023/8/1 15:55
加载中...