社区讨论

最后一测试点错,第一个数字2而我输出3求调

P1249最大乘积参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo8cu82f
此快照首次捕获于
2023/10/27 16:31
2 年前
此快照最后确认于
2023/10/27 16:31
2 年前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
string f[10001],tot="1";
int a[10001],k=0,o=0,n;
string add(string str1,string str2)
{
    string str;
    int len1=str1.length();
    int len2=str2.length();
    if(len1<len2)
    {
        for(int i=1;i<=len2-len1;i++)
           str1="0"+str1;
    }
    else
    {
        for(int i=1;i<=len1-len2;i++)
           str2="0"+str2;
    }
    len1=str1.length();
    int cf=0;
    int temp;
    for(int i=len1-1;i>=0;i--)
    {
        temp=str1[i]-'0'+str2[i]-'0'+cf;
        cf=temp/10;
        temp%=10;
        str=char(temp+'0')+str;
    }
    if(cf!=0)  str=char(cf+'0')+str;
    return str;
}
string mul(string str1,string str2)
{
    string str;
    int len1=str1.length();
    int len2=str2.length();
    string tempstr;
    for(int i=len2-1;i>=0;i--)
    {
        tempstr="";
        int temp=str2[i]-'0';
        int t=0;
        int cf=0;
        if(temp!=0)
        {
            for(int j=1;j<=len2-1-i;j++)
              tempstr+="0";
            for(int j=len1-1;j>=0;j--)
            {
                t=(temp*(str1[j]-'0')+cf)%10;
                cf=(temp*(str1[j]-'0')+cf)/10;
                tempstr=char(t+'0')+tempstr;
            }
            if(cf!=0) tempstr=char(cf+'0')+tempstr;
        }
        str=add(str,tempstr);
    }
    str.erase(0,str.find_first_not_of('0'));
    return str;
}
int main()
{
	cin>>n;
	if(n==3)
	cout<<"2";                      
	else if(n==4)
	cout<<"3";
	else
	{
		f[2]="2";
		for(int i=3;i<=n;i++)
		{
			
			f[i]=add(f[i-1],to_string(i));
			if((f[i].size()>to_string(n).size())||(f[i].size()==to_string(n).size()&&f[i]>=to_string(n)))
			{
				k=i-1;
				break;
			}
		}
		for(int i=k;i>=2;i--)
		{
			if((f[k].size()<to_string(n).size())||(f[k].size()==to_string(n).size()&&f[k]<to_string(n)))
			{
				n--;
				tot=mul(to_string(i+1),tot);
				a[++o]=i+1;
			}
			else
			{
				tot=mul(to_string(i),tot);
			    a[++o]=i;
			}
		}
		for(int i=o;i>=1;i--)
		{
			cout<<a[i];
			if(i!=1)
			cout<<" ";
		}
		cout<<endl;
	    cout<<tot;
	}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...