为什么会WA?
  • 板块P1249 最大乘积
  • 楼主frzFRZ
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/15 12:02
  • 上次更新2024/7/15 14:15:04
查看原帖
为什么会WA?
774559
frzFRZ楼主2024/7/15 12:02

我写的代码有问题吗!求调!

#include<bits/stdc++.h>
using namespace std;
int n,cnt=1,ans[10010]; //cnt表示拆成了几个数,ans表示这cnt个数分别是什么
string s[10010],m="1"; //s存要乘在一起的数,m表示结果
string cheng(string a,string b) //高精乘
{
	int na[10010],nb[10010],nc[10010],la=a.length(),lb=b.length();
	memset(na,0,sizeof(na));memset(nb,0,sizeof(nb));memset(nc,0,sizeof(nc));
	for(int i=la-1;i>=0;i--) na[la-i]=a[i]-'0';
	for(int i=lb-1;i>=0;i--) nb[lb-i]=b[i]-'0';
	for(int i=1;i<=la;i++)
		for(int j=1;j<=lb;j++) nc[i+j-1]+=na[i]*nb[j];
	for(int i=1;i<=la+lb;i++)
	{
		nc[i+1]+=nc[i]/10;
		nc[i]%=10;
	}
	string s;
	if(nc[la+lb]) s+=nc[la+lb]+'0';
	for(int i=la+lb-1;i>=1;i--) s+=nc[i]+'0';
	return s;
}
string change(int x) //整数换成字符串
{
	char c[10000],t;
	int sum=0;
	while(x!=0)
	{
		c[sum]=x%10+'0';
		x/=10;
		sum++;
	}
	for(int j=0,i=sum-1;j<=i/2;j++,i--) swap(c[i],c[j]);
	return c;
}
int main()
{
	cin>>n;
	if(n<=4)
	{
		cout<<n<<endl<<n<<endl;
		return 0;
	}
	for(int i=2;i<=n;i++)
	{
		if(n>=i)
		{
			n-=i;
			ans[cnt++]=i;
			s[cnt-1]=change(i);
		}
	}
	while(n!=0)
	{
		for(int i=cnt-1;i>=1;i--)
		{
			if(n>0)
			{
				ans[i]++;
				s[i]=change(ans[i]);
				n--;
			}
		}
	}
	for(int i=1;i<cnt;i++)
	{
        cout<<ans[i]<<" ";
        string x=cheng(s[i],m);
        m=x;
    }
    cout<<endl<<m<<endl;
	return 0;
}
2024/7/15 12:02
加载中...