【C语言代码】大数N的阶乘!

来源:互联网 发布:大思英语网络课程转让 编辑:程序博客网 时间:2024/04/29 20:01

大数N阶乘算法

在做小数N阶乘时,使用递归算法,而当N数变大时,就不好算了因此谢了这个程序,来计算大数N阶乘,做了好长时间,希望对大家有所帮助。

#include <stdlib.h>#include <stdio.h>#include <string.h>#include "oj.h"#define N 1000 /*  *将在数组中保存的字符串转成数字存到int数组中 */  void getdigits1(int *a,char *s)  {       int i;       char digit;       int len = strlen(s);         //对数组初始化       for(i = 0; i < N; ++i)             *(a + i) = 0;       for(i = 0; i < len; ++i){             digit = *(s + i);             *(a + len - 1 - i) = digit - '0';//字符串s="12345",因此第一个字符应该存在int数组的最后一个位置       }  }    /*  *将数组a与数组b逐位相乘以后存入数组c  */  void multiply2(int *a,int *b,int *c)  {       int i,j;         //数组初始化       for(i = 0; i < 2 * N; ++i)             *(c + i) = 0;       /*       *数组a中的每位逐位与数组b相乘,并把结果存入数组c       *比如,12345*12345,a中的5与12345逐位相乘       *对于数组c:*(c+i+j)在i=0,j=0,1,2,3,4时存的是5与各位相乘的结果       *而在i=1,j=0,1,2,3,4时不光会存4与各位相乘的结果,还会累加上上次相乘的结果.这一点是需要注意的!!!      */       for(i = 0; i < N; ++i)             for(j = 0; j < N; ++j)                   *(c + i + j) += *(a + i) * *(b + j);       /*       *这里是移位、进位      */       for(i = 0; i < 2 * N - 1; ++i)       {             *(c + i + 1) += *(c + i)/10;//将十位上的数向前进位,并加上原来这个位上的数             *(c + i) = *(c + i)%10;//将剩余的数存原来的位置上       }  }  void CalcNN(int n, char *pOut){int a[N],b[N],c[2*N];      char s1[N],s2[N];      int j = 2*N-1;      int i,k = 0,t = 0;  char chuan[100][100];char temp[2];char tempint[N];if(n > 100 || n < 0)return;/******* 将n阶乘 需要乘的数全部变成字符串 *******/for(k = 1; k <= n; k++){itoa(k,chuan[k-1],10);}/****** 进行一步一步的相乘 不断递增 ******/strcpy(s2,"1");for(k = 0; k < n; k++){strcpy(s1,chuan[k]);getdigits1(a,s1);  getdigits1(b,s2);        multiply2(a,b,c); while(c[j] == 0)                 j--; for(i = j;i >= 0; --i)  {itoa(c[i],temp,10);tempint[t] = temp[0] ;t++;}tempint[t] = '\0';strcpy(s2,tempint);memset(tempint,0,N);t = 0;j = 2*N-1;}strcpy(pOut,s2);//puts(pOut);return;}

主函数中需要分配大点内存给pOut,并且记得释放,n为阶乘数

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 obs直播有电流音怎么办 语音里网吧很吵怎么办 电脑k歌有延迟怎么办 想开个跆拳道馆怎么办营业执照? 壶嘴拐弯处漏水怎么办 裂纹茶壶嘴坏了怎么办 小孩刚上学怕她上火怎么办 在幼儿园小朋友不愿叠衣服怎么办 孩子在家听话幼儿园不听话怎么办 变魔术时观众说看过这个怎么办 孕妇8个月摔跤了怎么办 孩子吃了残奶怎么办 小米手机变卡了怎么办 主持时说错话了怎么办 小鲜肉老了不红怎么办 同学聚会大家玩手机你怎么办 率土之滨被掠夺怎么办 戒指戴手上取不下来怎么办 择离开我我该怎么办 解小手解不出来怎么办 学生把班里的班费弄丢了怎么办 班里选的班长成绩差怎么办 幼儿园班里孩子发生传染病怎么办 小仓鼠生了该怎么办 把老公生日忘了怎么办 老公说老婆脑子不好怎么办 和上司暧昧被同事发现怎么办 减肥不吃晚餐饿了怎么办 小孩晚饭吃多了怎么办 减肥晚上不吃饭饿了怎么办 两个人在一起性格不合怎么办 赌在你身上输了怎么办 苹果7lcould满了怎么办 e招贷不用了怎么办 牙活动了怎么办还疼 30岁掉了一颗牙怎么办? 在淘宝上交话费交错了怎么办 演出队在小区旁边扰民怎么办 雷雨天加了油怎么办 戴ok镜眼睛重影怎么办 乌龟背上长白色的花纹怎么办?