求助各位巨佬,不知道哪里错了
查看原帖
求助各位巨佬,不知道哪里错了
582368
chong_yu楼主2022/5/8 21:38

没加高精60分,加了高精只有50分了 代码如下

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
#define MAXN 50
#define maxn 60
struct Big_int {//高精度模板开始
    int a[maxn];//a[0]用于储存长度,1-a[0]倒序储存
    Big_int() { memset(a, 0, sizeof(a)); }
    Big_int& operator = (const string s)
    {
        int k = 0;
        for (int i = s.size() - 1; i >= 0; i--)
        {
            k++;
            a[k] = s[i] - '0';
        }
        a[0] = s.size();
        return *this;
    }
    Big_int& operator * (const int b)
    {
        int ncarry = 0;
        for (int i = 1; i <= a[0]; i++) {
            a[i] = a[i] * b + ncarry;
            ncarry = a[i] / 10;
            a[i] %= 10;
        }
        for (int i = a[0] + 1; ncarry > 0; i++, a[0]++) {
            a[i] = ncarry % 10;
            ncarry /= 10;
        }
        return *this;
    }
    Big_int& operator =(const int b)
    {
        int num = b, i = 0;
        while (num != 0)
        {
            i++;
            this->a[i] = num % 10;
            num /= 10;
        }
        this->a[0] = i;
        return *this;
    }
    Big_int operator + (const Big_int b)
    {
        Big_int c;
        c.a[0] = max(a[0], b.a[0]);
        for (int i = 1; i <= c.a[0]; i++)
        {
            c.a[i] += (a[i] + b.a[i]);
            c.a[i + 1] += c.a[i] / 10;
            c.a[i] %= 10;
        }
        if (c.a[c.a[0] + 1] > 0)
            c.a[0]++;
        return c;
    }
    bool operator <(const Big_int b)
    {
        if (this->a[0] < b.a[0])
            return true;
        if (this->a[0] > b.a[0])
            return false;
        for (int i = b.a[0]; i >= 1; i--)
        {
            if (this->a[i] != b.a[i])
                return this->a[i] < b.a[i];
        }
        return false;
    }
    bool operator >(Big_int b)
    {
        return b < *this;
    }
};
ostream& operator<<(ostream& out, const Big_int a)
{
    for (int i = a.a[0]; i >= 1; i--)
        out << a.a[i];
    return out;
}
int N, K;
Big_int dfs(int num, int* s,int pos) {
    Big_int ret;
	long long tem = 0;
	if (num == 0) {
		for (int i = pos; i <= N - 1; i++) {
			tem *= 10;
			tem += s[i];
		}
        ret = tem;
		return ret;
	}
	for (int i = pos+1 ; i <= N - num-1; i++) {
		tem = 0;
		for (int j = pos; j < i; j++) {
			tem *= 10;
			tem += s[j];
		}
        if (ret <(dfs(num - 1, s, i)*tem)) {
            ret = (dfs(num - 1, s, i)*tem) ;
        }
	}
    return ret;
}

int main() {
	cin >> N >> K;
    int a[MAXN] = {0};
    char b[MAXN] = {0};
	for (int i = 0; i < N; i++) {
	    cin>>b[i];
        a[i] = b[i] - '0';
	}
    cout << dfs(K, a, 0);
	return 0;
}
2022/5/8 21:38
加载中...