#include
#include
#define MAX 1000
typedef struct DuLNode{
int data;
struct DuLNode *first;
struct DuLNode *last;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList; //创建双向链表
void InitLinkList(DuLNode **p)
{
*p=(DuLinkList)malloc(sizeof(DuLNode));
if(*p!=0)(*p)->next=(*p)->prior=*p;
}
void Create(DuLinkList L)
{
DuLinkList p=L,q;
int i;
L->first=p;
for(i=0;i
q=(DuLinkList)malloc(sizeof(DuLNode));
q->data=0;
p->next=q;
q->prior=p;
q->next=NULL;
p=q;
}
L->last=q;
}
void Jia(DuLinkList a,DuLinkList b)
{
DuLinkList p=a->last,q=b->last;
int x;
while(q!=b->first)
{
x=q->data+p->data; //i位的数
q->data=x%10; //i位的个位
q->prior->data+=x/10; //进位
q=q->prior;
p=p->prior;
}
}
void Cheng(DuLinkList a,int k)
{
DuLinkList p=a->last;
int x,y=0;
for(;p!=a->first;p=p->prior)
{
x=(p->data)*k+y;//i位的数
y=x/10;//进位加数
p->data=x%10;//i位的个位
}
x=(p->data)*k+y;//i位的数
y=x/10;//进位加数
p->data=x%10;//i位的个位
}
void Chu(DuLinkList a,int k)
{
DuLinkList p=a->first;
int x,y=0;
for(;p!=NULL;p=p->next)
{
x=p->data+y*10;//借位除
p->data=x/k;//整除数
y=x%k;//余数
}
}
void Calculation(int n)
{
int i,top=1,bottom=3,x=0;
DuLinkList sum,num,l,p;
InitLinkList(&sum);
InitLinkList(&num);
Create(sum);
Create(num);
sum->first->data=2;
num->first->data=2;
l=num;
while(x++<1800)
{
Cheng(num,top);
Chu(num,bottom);
Jia(num,sum);
top++;bottom+=2;
}
printf("3.");
for(i=0;i
{
printf("%d",sum->next->data); //从十分位开始打印
sum=sum->next;
}
}
int main(){
int n;
scanf("%d",&n);
Calculation(n);
printf("\n");
return 0;
}