高精度加减法 1000阶乘求法
1000的阶乘 2568位
#include <iostream.h> #include <string.h> #include <stdlib.h> #include <math.h> void fun(const char *a,const char *b ,char *c) {int index;if (a[0]>'0'&&b[0]>'0')//两个正数相加 {index=0;}if (a[0]=='-'&&b[0]=='-')//两个负数相加 {index=2;}if (a[0]>'0'&&b[0]=='-')//a+,b- {index=1;}if (a[0]=='-'&&b[0]>'0'){index=3;}switch(index){case 0:{int remainder=0;int length=strlen(a)>strlen(b)?strlen(a):strlen(b);for (int i=strlen(a)-1,j=strlen(b)-1;i>=0||j>=0;i--,j--){int x1,x2;if (i>=0) x1=a[i]-'0';elsex1=0;if (j>=0) x2=b[j]-'0';elsex2=0;div_t temp=div(x1+x2+remainder,10);remainder=temp.quot;c[length--]=temp.rem+'0';}if(remainder!=0)c[0]=remainder+'0';else{for (int i=0;i<strlen(c);i++){c[i]=c[i+1];}}}break;case 1:{if (strlen(a)>strlen(b)-1||strlen(a)==strlen(b)-1&&strcmp(a,b+1)>=0)//a-b为+ {int remainder=0;for (int i=strlen(a)-1,j=strlen(b)-1;i>=0||j>0;i--,j--){int x1,x2;if (i>=0){x1=a[i]-'0';} else{x1=0;}if (j>0){x2=b[j]-'0';} else{x2=0;}int value=x1-x2+remainder;if (value>=0){c[i]=value+'0';remainder=0;} else{ c[i]=value+10+'0';remainder=-1;}}} else{int remainder=0;for (int i=strlen(a)-1,j=strlen(b)-1;i>=0||j>0;i--,j--){int x1,x2;if (i>=0){x1=a[i]-'0';} else{x1=0;}if (j>0){x2=b[j]-'0';} else{x2=0;}int value=x2-x1+remainder;if (value>=0){c[j]=value+'0';remainder=0;} else{ c[j]=value+10+'0';remainder=-1;}}c[0]='-';}}break;case 2:{int length=strlen(a)>strlen(b)?strlen(a):strlen(b);int remainder=0;for (int i=strlen(a)-1,j=strlen(b)-1;i>0||j>0;i--,j--){int x1,x2;if (i>0) x1=a[i]-'0';elsex1=0;if (j>0) x2=b[j]-'0';elsex2=0;div_t temp=div(x1+x2+remainder,10);remainder=temp.quot;if (i>=j){c[i+1]=temp.rem+'0';} else{c[j+1]=temp.rem+'0';}}if(remainder!=0){c[1]=remainder+'0';c[0]='-';}else{c[0]='-';for (int i=1;i<=length+3;i++){c[i]=c[i+1];}}}break;case 3:{if (strlen(b)>strlen(a)-1||strlen(b)==strlen(a)-1&&strcmp(b,a+1)>=0)//b-a为+ {int remainder=0;for (int i=strlen(b)-1,j=strlen(a)-1;i>=0||j>0;i--,j--){int x1,x2;if (i>=0){x1=b[i]-'0';} else{x1=0;}if (j>0){x2=a[j]-'0';} else{x2=0;}int value=x1-x2+remainder;if (value>=0){c[i]=value+'0';remainder=0;} else{ c[i]=value+10+'0';remainder=-1;}}} else{int remainder=0;for (int i=strlen(a)-1,j=strlen(b)-1;i>0||j>=0;i--,j--){int x1,x2;if (i>0){x1=a[i]-'0';} else{x1=0;}if (j>=0){x2=b[j]-'0';} else{x2=0;}int value=x1-x2+remainder;if (value>=0){c[i]=value+'0';remainder=0;} else{ c[i]=value+10+'0';remainder=-1;}}c[0]='-';}}break;} } void main() {char sum[10000]={'\0'};char temp1[10000]={'\0'};char temp2[10000]={'\0'};sum[0]='1';for (int i=2;i<=20;i++){memset(temp2,0,10000);strcpy(temp2,sum);for (int j=1;j<=i-1;j++){memset(temp1,0,10000);strcpy(temp1,sum);fun(temp1,temp2,sum);}cout<<sum<<endl;}//cout<<sum<<endl; }
转载于:https://www.cnblogs.com/GoAhead/archive/2012/09/09/2677522.html
高精度加减法 1000阶乘求法相关推荐
- 高精度加减法的应用——试解大数之和
一.前言 我是夏日弥,很高兴看到您来读我的博客, 这一次小夏将为您讲解一道经典的算法竞赛入门题,使用的方法涉及高精度加法和减法,vector动态数组,这是一种比较容易想得到,却不好代码实现的方法. 于 ...
- c语言高精度加减法程序,C语言实现高精度加减法
本文实例为大家分享了C语言实现高精度加减法的具体代码,供大家参考,具体内容如下 首先,我们来看一下C语言中各类型的最值: unsigned int 0-4294967295 int -21474836 ...
- 程序求1!+2!+3!+...+1000!的和, 求1到1000阶乘之和
求1到1000阶乘之和 今天在脉脉的匿名区看到一个这个面试题,有个面试官说面试者连这道题都不会写,我想了几分钟就能解出来,把代码写下来.写得有点繁琐了~~~,有高手可以指导更简单的方法了么... 求一 ...
- C语言求1000后面有多少个0,1到1000的阶乘 求1000阶乘的结果末尾有多少个0
急求.用java算1到1000阶乘的末尾有几个零? 急求.用java算1到1000阶乘的末尾有几个零?急求具体的java程序怎么写? 1000的阶乘后面有多少个零? 从1乘到1000得出的结果后面有多 ...
- 1000的阶层 java,1000!阶乘怎么算
1000! 阶乘怎么算? 在JAVA中,有BigInteger这个类,可以为你解决 . 但是如果是在C++,或者不用这个BigInteger又怎么解决呢? 由于没有C++编译器,所以只能用JAVA来代 ...
- C++ 高精度加减法 (vector实现)
前言 在C++中,数据范围超过long long 的范围时,就要考虑到高精度,下面为运用容器实现的高精度加减法.(刚学,可能存在瑕疵) 基本步骤 对于输入的数据可以用string接收.然后遍历要运算的 ...
- Java 1000阶乘计算
1000的阶乘使用BigInteger import java.math.BigInteger; import java.util.Scanner;public class Main {public ...
- java 求1000的阶乘_求1000阶乘的结果末尾有多少个0
素数是个科学计算中很重要的一个概念,素数也叫质数.素数就是最纯净的数,没有任何其它成分的数,其它的数都可以说是由素数相乘出来的. 所以,理解好素数,对于数学和程序来说,有重要的意义. 题目是:求100 ...
- python 摸索(二) 让我爱上python的一句1000阶乘代码
reduce (lambda x,y:x*y ,xrange(1,1001)) 实现1000的阶乘,简约! reduce(function, iterable[,initializer]) reduc ...
最新文章
- nagios监控远程端口
- (转)个例子让你了解Java反射机制
- 打印下标iOS 6-字面量
- 基于java的社交网站毕业设计_软件工程毕业设计_社交网站.pdf
- SAP Spartacus 重用组件cx-table的设计原理
- oracle opaque_transform,oracle databse link
- 使用Directory.EnumerateFiles进行批处理
- python装饰器函数执行后日志_python 某一函数上面有多个装饰器
- 2010多校第一题 hdu3440House Man 差分约束系统
- 2020 华为 一面 二面 面经
- 软考高项(信息系统项目管理师)计算题公式汇总
- 思维模型:建立高品质思维的30种模型
- 海康大华RTSP转HLS直播
- 同学,主业和副业如何选?
- 如何让在国内访问github网站的速度变快
- STM32H743ZI+MPU+LWIP ping解决
- HDU -1704 Rank——floyd
- 面对DDoS攻击的威胁时应该怎么做呢?
- 将C:\Users下中文用户名修改为英文(Win10)
- 2021 Jiangsu Collegiate Programming Contest部分题解