求改结构体高精(c++)
  • 板块学术版
  • 楼主Dirty_Chen
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/1/13 18:51
  • 上次更新2023/10/28 12:25:18
查看原帖
求改结构体高精(c++)
524046
Dirty_Chen楼主2022/1/13 18:51

RT,卡了一天了

#include<bits/stdc++.h>
using namespace std;

struct node
{
	int number[100];
	int len;
}dp[105][105],d[105],w[105],di;

int n;
string s;

void init(int);
void print(node);
void clean(node);

node operator + (node a,node b)
{
	node c;
	clean(c);
	for(int i=1;i<=max(a.len,b.len);i++)
	{
		c.number[i]+=a.number[i]+b.number[i];
		if(c.number[i]>=10)
		{
			c.number[i]%=10;
			c.number[i+1]++;
		}
	}
	if(c.number[max(a.len,b.len)+1]) 
		c.len=max(a.len,b.len)+1;
	else 
		c.len=max(a.len,b.len);
	return c;
}

node operator * (node a,node b)
{
	node c;
	clean(c);
	for(int i=1;i<=a.len;i++)
	{
		for(int j=1;j<=b.len;j++)
		{
			c.number[i+j-1]+=a.number[i]*b.number[j];
			c.number[i+j]+=c.number[i+j-1]/10;
			c.number[i+j-1]%=10;
		}
	}
	c.len=a.len+b.len;
	while(c.len>1&&c.number[c.len]==0)
		c.len--;
	return c;
}

int main()
{
	di.len=1;
	di.number[1]=2;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		init(i);
		print(d[i]);
	}
	node dd=d[1]+d[2];
	print(dd);
}

void init(int k)
{
	clean(d[k]);
	int leng=s.length();
	d[k].len=leng;
	for(int i=0;i<leng;i++)
	{
		d[k].number[i+1]=s[leng-i-1]-'0';
//		cout<<d[k].number[i+1]<<endl;
	}
}

void print(node a)
{
	for(int i=a.len;i>=1;i--)
		cout<<a.number[i];
	cout<<endl;
}

void clean(node a)
{
	memset(a.number,0,sizeof(a.number));
	a.len=0;
}
2022/1/13 18:51
加载中...