用幂集展开
typedef struct DNode
{
ElemType data;
struct DNode *pre, *next;
}DNode, *DLinkList;
void ListCreate(DLinkList L, int n)
{
int i;
DLinkList p, s;
p = L;
{
int i;
DLinkList p, s;
p = L;
L->pre = L->next = L; //表为空时,前驱和后继都指向自己
for(i = 0; i < n; i ++)
{
s = (DLinkList)malloc(sizeof(DNode));
s->data = 0;
{
s = (DLinkList)malloc(sizeof(DNode));
s->data = 0;
p->next = s; //前驱和后继相互连接
s->pre = p;
s->pre = p;
s->next = L; //头和尾互指
L->pre = s;
p = s;
}
}
L->pre = s;
p = s;
}
}
void ListTraverse(DLinkList L)
{
DLinkList p = L;
while(p->next != L)
{
p = p->next;
printf("%d", p->data);
{
DLinkList p = L;
while(p->next != L)
{
p = p->next;
printf("%d", p->data);
}
printf("\n");
}
printf("\n");
}
int main()
{
DNode rn, sum;
ListCreate(&rn, 10);
ListCreate(&sum, 10);
rn.next->data = 2;
sum.next->data = 2;
{
DNode rn, sum;
ListCreate(&rn, 10);
ListCreate(&sum, 10);
rn.next->data = 2;
sum.next->data = 2;
int i;
DLinkList pr, ps;
for(i = 1; i < 10; i ++)
{
{
pr = rn.pre, ps = sum.pre;
int ret = 0, temp;//ret是指进位标志,temp时当前数位的数值
printf("%d.1\n",i);
while(pr != &rn)
{
temp = (pr->data*i)+ret;
ret = temp/10;
pr->data = temp%10;
pr = pr->pre;
printf("ret=%d temp=%d ",ret,temp);
ListTraverse(&rn);
}
printf("\n");
pr = pr->next;
ret = temp/10;
pr->data = temp%10;
pr = pr->pre;
printf("ret=%d temp=%d ",ret,temp);
ListTraverse(&rn);
}
printf("\n");
pr = pr->next;
//printf("after 1:rn=");ListTraverse(&rn);printf("ret=%d temp=%d\n",ret,temp);
//printf("ret=%d temp=%d\n",ret,temp);
//此时的节点指向pr->next
//此上的操作时将其乘i
printf("%d.2\n",i);
while(pr != &rn)
{
//printf("ret=%d temp=%d\n",ret,temp);
//此时的节点指向pr->next
//此上的操作时将其乘i
printf("%d.2\n",i);
while(pr != &rn)
{
temp = (ret*10+pr->data);
ret = temp%(2*i+1);
pr->data = temp/(2*i+1);
pr = pr->next;
printf("ret=%d temp=%d ",ret,temp);
ListTraverse(&rn);
}
//次上操作是除2*n+1
ret = 0;
pr = pr->pre;
ret = temp%(2*i+1);
pr->data = temp/(2*i+1);
pr = pr->next;
printf("ret=%d temp=%d ",ret,temp);
ListTraverse(&rn);
}
//次上操作是除2*n+1
ret = 0;
pr = pr->pre;
//printf("after 2:rn=");ListTraverse(&rn);printf("ret=%d temp=%d\n",ret,temp);
//ListTraverse(&rn);
//将r(n)与sum逐位相加
while(pr != &rn && ps != &sum)
{
temp = (ret+pr->data+ps->data);
ret = temp/10;
ps->data = temp%10;
pr = pr->pre;
ps = ps->pre;
}
printf("\n");
printf("after %d:sum=",i);ListTraverse(&sum);printf("ret=%d temp=%d\n",ret,temp);printf("\n");
}
int n;
scanf("%d", &n);
//将r(n)与sum逐位相加
while(pr != &rn && ps != &sum)
{
temp = (ret+pr->data+ps->data);
ret = temp/10;
ps->data = temp%10;
pr = pr->pre;
ps = ps->pre;
}
printf("\n");
printf("after %d:sum=",i);ListTraverse(&sum);printf("ret=%d temp=%d\n",ret,temp);printf("\n");
}
int n;
scanf("%d", &n);
printf("3.");
ps = ps->next;
for(ps = ps->next; n; ps = ps->next, n--)
printf("%d", ps->data);
printf("\n");
return 0;
}
ps = ps->next;
for(ps = ps->next; n; ps = ps->next, n--)
printf("%d", ps->data);
printf("\n");
return 0;
}