九度1076 N的阶乘
来源:互联网 发布:淘宝实名认证怎么看 编辑:程序博客网 时间:2024/05/21 09:59
n数值较小,可以直接与每位上的数相乘。
#include <stdio.h>#include <stdlib.h>#include <string.h>void reverse(char * s){ char temp; int i,j; for(i=0,j=strlen(s)-1;i<j;i++,j--) { temp=s[i]; s[i]=s[j]; s[j]=temp; }}int main(){ int n; char res[3000]; int i,j; int add; int len; while(~scanf("%d",&n)) { add=0; len=1; memset(res,'0',3000); res[0]='1'; for(i=2;i<=n;i++) { for(j=0;j<len;j++) { add += (res[j]-'0')*i; res[j] = add%10 + '0'; add /= 10; } for(;add!=0;add/=10) res[len++]=add%10+'0'; } res[len]='\0'; reverse(res); printf("%s\n",res); } return 0;}
用大数乘法实现
#include <stdio.h>#include <stdlib.h>#include <string.h>void reverse(char * s){ char temp; int i,j; for(i=0,j=strlen(s)-1;i<j;i++,j--) { temp=s[i]; s[i]=s[j]; s[j]=temp; }}void multi(char *lef,char * rig,char * res){ int ll,rl; int i,j; int add,mul; ll = strlen(lef); rl = strlen(rig); int len; int temp1,temp2; for(i = 0 ; i < rl ; i ++) { add=mul=0; for(j=0;j<ll;j++) { temp1 = (lef[j]-'0')*(rig[i]-'0') + mul; mul = temp1/10; temp1 %= 10; if(res[i+j]==0) { temp2= temp1+add; } else { temp2 = res[i+j] - '0' + temp1 + add; } add = temp2 / 10; res[i+j] = temp2%10 + 48; } len = i + ll; for( ; add != 0 || mul!=0 ; add /= 10,mul /= 10) { res[len++] = '0' + mul%10 + add%10; } }}int main(){ int n; char res[3000]; char right[5]; char left[3000]; int i,j; int add; int len; while(~scanf("%d",&n)) { add=0; memset(left,0,3000); memset(res,0,3000); left[0]='1'; for(i=2;i<=n;i++) { /*for(j=0;j<len;j++) { add += (res[j]-'0')*i; res[j] = add%10 + '0'; add /= 10; } for(;add!=0;add/=10) res[len++]=add%10+'0';*/ memset(res,0,3000); sprintf(right,"%d",i); reverse(right); multi(left,right,res); strcpy(left,res); } reverse(res); printf("%s\n",res); } return 0;}
简单的大数乘法实现
void multiply(const char *a,const char *b){ int i,j,ca,cb,*s; ca=strlen(a); cb=strlen(b); s=(int *)malloc(sizeof(int)*(ca+cb)); //分配存储空间 for (i=0;i<ca+cb;i++) s[i]=0; // 每个元素赋初值0 for (i=0;i<ca;i++) for (j=0;j<cb;j++) s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); for (i=ca+cb-1;i>=0;i--) // 这里实现进位操作 if (s[i]>=10) { s[i-1]+=s[i]/10; s[i]%=10; } char *c=(char *)malloc((ca+cb)*sizeof(char)); //分配字符数组空间,因为它比int数组省! i=0;while(s[i]==0) i++; // 跳过头部0元素 for (j=0;i<ca+cb;i++,j++) c[j]=s[i]+'0'; c[j]='\0'; for (i=0;i<ca+cb;i++) cout<<c[i]; cout<<endl; free(s);}
0 0
- 九度-1076-N的阶乘
- 九度 1076 N的阶乘(模拟)
- 九度1076 N的阶乘
- 九度OJ-1076:N的阶乘
- 九度OJ-1076-N的阶乘
- 九度OJ 1076 n的阶乘
- 九度题目1076:N的阶乘
- 九度OJ 1076:N的阶乘(高精度计算)
- 九度论坛--上机题1076:N的阶乘
- 九度OJ 1076 N的阶乘 -- 大数运算
- 九度OJ 1076 N的阶乘 (模拟)
- 九度OJ-1076-N的阶乘
- 九度oj 题目1076:N的阶乘
- 九度OJ 题目1076:N的阶乘
- 九度OJ 1076 N的阶乘 (大整数运算)
- 九度 oj 题目1076:N的阶乘
- 【九度OJ】题目1076:N的阶乘 解题报告
- 九度OJ 1076 N的阶乘 大数乘法
- HDU 5879 Cure(打表)qingdao网赛
- 安装VM tools时错误:依赖检测失败:
- 2016ICPC青岛网络赛 1006
- 打印某个区间之间的素数,并输出素数的个数。如100-200
- 内联式css样式
- 九度1076 N的阶乘
- 烽火通信2017 校招 软件工程师 CT扫描
- UML行为建模图———状态机图
- 未释放互斥锁线程退出
- 外联式css样式
- 9.17水题总结
- UML行为建模图———交互概览图
- 伪类选择器
- Java中接口(Interface)的定义和使用