对刚才的题目注释了一下,求助大佬,就是输入6之后都是873,错误出在哪。。
查看原帖
对刚才的题目注释了一下,求助大佬,就是输入6之后都是873,错误出在哪。。
395887
jinhai楼主2020/10/11 18:37
#include<bits/stdc++.h>
using namespace std;
int m[1000][1000];
int num[1000];
void mul(int a,int b,int c)                              //高精乘 
{
	for(int j=1;j<=num[a];j++)
	{
		for(int t=1;t<=num[b];t++)
		{
		 	m[c][j+t-1]=m[a][j]*m[b][t];
	 	}
	}
	int len=1;
	while(m[c][len])                                      //处理进位 
	{ 
		m[c][len+1]+=m[c][len]/10;
		m[c][len]%=10;
		len++;
	}
	len--;
	num[c]=len;                                            //记录进位后的长度 
}

void plu(int a,int b,int c)                                //高精加 
{
	int t;
	t=max(num[b],num[a]);
	for(int i=1;i<=t;i++)
	{
		m[c][i]=m[a][i]+m[b][i];
	}
	int len=1;
	while(m[c][len])                                        //处理进位 
	{
		m[c][len+1]+=m[c][len]/10;
		m[c][len]%=10;
		len++;
	}
	len--;
	num[c]=len;                                              //记录进位后的长度,并返回值给   int main   以便倒序输出操作 
}
int main()
{
	int s;
	cin>>s;
	for(int i=1;i<=s;i++)
	{
		int x=1,d=i;
		while(d)
		{
			m[i][x]=d%10;
			d/=10;
			x++;
		}
		x--;
		num[i]=x;
	}
	mul(1,2,51);                                              //给定初始值,运用高精乘 
	for(int i=3;i<=s;i++)
		mul(i,48+i,49+i);
	plu(1,51,100);                                            //给定初始值,运用高精加 
	int i;
	for(i=3;i<=s;i++)                              
		plu(49+i,97+i,98+i);
	i--;
	int d=98+i;
	for(int i=num[d];i>=1;i--)    cout<<m[d][i];                  //倒序输出 
	return 0;
}


2020/10/11 18:37
加载中...