- //时间:2015年8月15日 183723
- //可以计算unsigned long long 类型范围的阶乘
- #include iostream
- #include stdio.h
- #include time.h
- using namespace std;
- struct item
- {
- short int num;
- item next;
- };
- 初始化链表
- item front = 0;
- item last = 0;
- int num2;需要阶乘的数
- void set_num(unsigned long long & num);添加到链表
- void num_count(int & i,int & num2);
- void de_num();删除链表
- void show();显示链表
- int main()
- {
- int i;
- unsigned long long num=1;储存12以内的阶乘
- cout请输入阶乘的数;
- cinnum2;
- for (i=1; i=num2; ++i)计算阶乘
- {
- num = i;
- if(i == 12)当阶乘的数到12时将值放入链表中
- {
- set_num(num);
- ++i;
- break;
- }
- }
- if(front != 0)如果链表不为空就计算链表里的值
- {
- num_count(i,num2);
- }
- if (front == 0)当链表为空时,直接显示
- {
- coutnum2的阶乘numendl;;
- }
- else
- {
- show();
- }
- de_num();删除链表
- system(pause);
- return 0;
- }
- void set_num(unsigned long long & num2)
- {
- 创建节点,并且赋值
- while(num2 != 0)
- {
- item p = new item;
- p-num = num2 % 10;
- num2 = 10;
- p-next = 0;
- if(front == 0)
- {
- front = p;
- last = p;
- }
- else
- {
- last-next = p;
- last = p;
- }
- }
- }
- void num_count(int & i,int & num2)
- {
- item n;指向链表里算到的节点
- int carry = 0;储存进位
- int val = 0;储存节点里的值
- for ( ; i = num2; ++i)计算阶乘的值
- {
- for (n = front; n != 0; n = n-next)计算链表的值
- {
- val = n-num i + carry;
- n-num = val % 10;
- carry = val 10;
- }
- while(carry != 0)
- {
- item p = new item;
- p-num = carry % 10;
- p-next = 0;
- last-next = p;
- last = p;
- carry = 10;
- }
- }
- }
- void de_num()删除链表
- {
- item n = front;
- while (n != 0)
- {
- item b = n-next;
- delete n;
- n = b;
- }
- }
- void show()显示链表
- {
- item n = front;
- int a = 0;
- while(n != 0)获取节点数
- {
- ++a;
- n = n-next;
- }
- int num = new int[a];
- n = front;
- for (int i=0; ia; ++i)储存到链表
- {
- num[a-i-1] = n-num;
- n = n-next;
- }
- for (int i=0; ia; ++i)显示链表
- {
- coutnum[i];
- }
- coutendlnum2!(a位)endl;
- delete [] num;
- }
- //该片段来自于http://www.codesnippet.cn/detail/1206201614724.html
来源: http://www.codesnippet.cn/detail/1206201614724.html