双向链表实现大数阶乘
参考代码:
#include<stdio.h> #include<stdlib.h> // 使用双向链表做阶乘 struct Fac { int num; struct Fac *next; struct Fac *back; }; int main() { int n; //head指向链表开头 q用于开辟区域 p用于辅助实现乘法和进位 struct Fac *head=NULL,*p=NULL,*q=NULL; scanf("%d",&n); // 构造表头 q = (struct Fac *)malloc(sizeof(struct Fac)); q ->next = NULL; q ->back = NULL; q ->num = 1; head = p = q; // 先乘法 再进位 从而实现阶乘 for(int i=2;i<=n;i++) { //乘法 p = head; while(p!=NULL) { p->num = (p->num)*i; p = p->next; } //进位 //将全部数字累加到最高位 p = head; while(p->next!=NULL) { p->next->num = p->next->num + p->num/10; p->num = p->num%10; p = p->next; } //在最高位进行进位 while(p->num/10!=0) { q = (struct Fac *)malloc(sizeof(struct Fac)); q ->next = NULL; q ->back = p; q ->num = p->num/10; p ->num = p->num%10; p ->next = q; p = q; } } while(p!=NULL) { printf("%d",p->num); p = p->back; } }
0.0分
1 人评分
【回文数(二)】 (C语言代码)浏览:728 |
字符串问题 (C语言代码)浏览:1503 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2080 |
【简单计算】 (C语言代码)浏览:622 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1144 |
C语言训练-大、小写问题 (C语言代码)浏览:674 |
C语言训练-自守数问题 (C语言代码)浏览:633 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:2739 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:4363 |
哥德巴赫曾猜测 (C++代码)浏览:736 |