• 高精度加减法 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'; else x1=0; if (j>=0) x2=b[j]-'0'; else x2=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'; else x1=0; if (j>0) x2=b[j]-'0'; else x2=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; }
  • 相关阅读:
    C语言学习趣事_19_C参考手册连接
    2_Windows下利用批处理文件获取命令行命令帮助信息
    C语言学习趣事_FILE_TYPE
    清华大学出版社版_Windows程序设计_方敏_不足_3
    Windows程序设计零基础自学_14_Windows文件和目录操作
    3_Windows下利用批处理文件_去除C源代码中指示行号的前导数字
    随想_7_Windows_7_Visual_Studio_2008_问题
    C语言小算法_1_数值转换
    C语言学习趣事_20_Assert_Setjmp
    C语言学习趣事_20_关于数组名与指针的讨论
  • 原文地址:https://www.cnblogs.com/GoAhead/p/2677522.html
Copyright © 2020-2023  润新知