高精度加减法 1000阶乘求法
生活随笔
收集整理的這篇文章主要介紹了
高精度加减法 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阶乘求法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对应的岗位_隐式相对导入如何
- 下一篇: 什么是堆栈的构造方法?向上生长堆栈,向下