#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
struct bigint
{
int a[10009],len;
bigint()//构造函数
{
memset(a,0,sizeof(a));
len=0;
}
/**************************/
bigint operator =(long long num)//高精度赋值int
{
memset(a,0,sizeof(a));
len=0;
do
{
a[++len]=num%10;
num/=10;
}while (num);
return *this;
}
/*********************************************************/
bigint operator +(const int k)
{
bigint c;
memcpy(c.a,a,sizeof(a));
c.len=len;
c.a[1]+=k;
int i=1;
while (c.a[i]>=10)////注意不要忘了加=号!!!!!!!
{
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
i++;
}
if (i>c.len) c.len=i;
return c;
} //高精度加单精度
/************************/
bigint operator +(const bigint &b)//高精度加高精度
{
bigint c;
c.len=max(len,b.len);
for (int i=1;i<=c.len;i++)
{
c.a[i]+=a[i]+b.a[i];
c.a[i+1]=c.a[i]/10;
c.a[i]=c.a[i]%10;
}
if (c.a[c.len+1]) c.len++;
return c;
}
/**************************************************/
bigint operator *(const int b)//高精度乘单精度
{
bigint c;
memcpy(c.a,a,sizeof(a));
c.len=len;
for (int i=1;i<=c.len;i++) c.a[i]=c.a[i]*b;
for (int i=1;i<=c.len;i++) c.a[i+1]+=c.a[i]/10,c.a[i]%=10;
while (c.a[c.len+1])
{
c.len++;
c.a[c.len+1]=c.a[c.len]/10;
c.a[c.len]%=10;
}
return c;
}
/***********************/
bigint operator *(const bigint &b)//高精度乘高精度
{
bigint c;
c.len=len+b.len;
for (int i=1;i<=len;i++)
for (int j=1;j<=b.len;j++)
c.a[i+j-1]+=a[i]*b.a[j];
for (int i=1;i<c.len;i++)
{
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
}
while (c.a[c.len]==0&&c.len>1) c.len--;
return c;
}
/*******************************************/
bigint operator -(const bigint &b)//高精度减高精度
{
bigint c;
c.len=len;
for (int i=1;i<=c.len;i++)
{
if (a[i]<b.a[i]) a[i+1]--,a[i]+=10;
c.a[i]=a[i]-b.a[i];
}
while (c.a[c.len]==0&&c.len>1) c.len--;
return c;
}
/**************************************************/
bool operator <(const bigint &b) const//比较符号
{
if (len!=b.len) return len<b.len;
for (int i=len;i>=1;i--)
if (a[i]!=b.a[i]) return a[i]<b.a[i];
return false;
}
bool operator >=(const bigint &b) const {return !(*this<b);}
/*---------------------------------------------------------------*/
};
void scan(bigint &b)//scanf式的输入
{
char ch[1009];
scanf("%s",ch);
int len=strlen(ch);
for (int i=0;i<len;i++) b.a[len-i]=ch[i]-'0';
b.len=len;
}
void print(bigint b)//print式的输出
{
for (int i=b.len;i>=1;i--) printf("%c",b.a[i]+'0');
}
/**********************************************************************/
istream& operator >>(istream &in,bigint &b)//cin的输入
{
char ch[10009];//注意这个不能开小了!!
in>>ch;
memset(b.a,0,sizeof(b.a));
int len=strlen(ch);
for (int i=0;i<len;i++) b.a[len-i]=ch[i]-'0';
b.len=len;
return in;
}
ostream& operator <<(ostream &out,const bigint &b)//iostream的输入输出
{
for (int i=b.len;i>=1;i--) out<<(char)(b.a[i]+'0');
return out;
}
/*********************************************/
bigint f[109];
int main()
{
int n;
scanf("%d",&n);
f[1]=1;f[2]=5;
bigint k1,k2;k1=3;k2=2;
for (int i=3;i<=n;i++) f[i]=f[i-1]*3-f[i-2]+2;
print(f[n]);
return 0;
}
biginteger模版,没有压位(较精简)
最新推荐文章于 2024-12-29 16:28:04 发布
