双向链表实现大数阶乘
参考代码:
#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分
2 人评分
十->二进制转换 (C语言代码)浏览:1330 |
小明A+B (C语言代码)浏览:1316 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:588 |
WU-小九九 (C++代码)浏览:1713 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:637 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:760 |
蛇行矩阵 (C语言代码)浏览:606 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:624 |
幸运数 (C++代码)浏览:1309 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:582 |