zoukankan      html  css  js  c++  java
  • 大数类相关计算(c语言版) void

    语法:int result=factorial(int n);

    参数:

    n:
    n 的阶乘

    返回值:
    阶乘结果的位数

    注意:



    本程序直接输出n
    !的结果,需要返回结果请保留long a[]


    需要 math.h

    源程序:



    int factorial(int n)
    {
    long a[10000];
    int i,j,l,c,m=0,w;

    a[
    0]=1;
    for(i=1;i<=n;i++)
    {
    c
    =0;
    for(j=0;j<=m;j++)
    {
    a[j]
    =a[j]*i+c;
    c
    =a[j]/10000;
    a[j]
    =a[j]%10000;
    }
    if(c>0) {m++;a[m]=c;}
    }

    w
    =m*4+log10(a[m])+1;
    printf(
    "\n%ld",a[m]);
    for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
    return w;
    }



    2.精度计算——乘法(大数乘小数)

    语法:mult(
    char c[],char t[],int m);

    参数:

    c[]:
    被乘数,用字符串表示,位数不限

    t[]:
    结果,用字符串表示

    m:
    乘数,限定10以内

    返回值:
    null

    注意:



    需要
    string.h

    源程序:



    void mult(char c[],char t[],int m)
    {
    int i,l,k,flag,add=0;
    char s[100];
    l
    =strlen(c);
    for (i=0;i<l;i++)
    s[l
    -i-1]=c[i]-'0';

    for (i=0;i<l;i++)
    {
    k
    =s[i]*m+add;
    if (k>=10) {s[i]=k%10;add=k/10;flag=1;} else {s[i]=k;flag=0;add=0;}
    }
    if (flag) {l=i+1;s[i]=add;} else l=i;

    for (i=0;i<l;i++)
    t[l
    -1-i]=s[i]+'0';
    t[l]
    ='\0';
    }




    3.精度计算——乘法(大数乘大数)

    语法:mult(
    char a[],char b[],char s[]);

    参数:

    a[]:
    被乘数,用字符串表示,位数不限

    b[]:
    乘数,用字符串表示,位数不限

    t[]:
    结果,用字符串表示

    返回值:
    null

    注意:



    空间复杂度为 o(n
    ^2)


    需要
    string.h

    源程序:



    void mult(char a[],char b[],char s[])
    {
    int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;
    char result[65];
    alen
    =strlen(a);blen=strlen(b);

    for (i=0;i<alen;i++)
    for (j=0;j<blen;j++) res[i][j]=(a[i]-'0')*(b[j]-'0');

    for (i=alen-1;i>=0;i--)
    {
    for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j];
    result[k]
    =sum%10;
    k
    =k+1;
    sum
    =sum/10;
    }

    for (i=blen-2;i>=0;i--)
    {
    for (j=0;j<=i;j++) sum=sum+res[i-j][j];
    result[k]
    =sum%10;
    k
    =k+1;
    sum
    =sum/10;
    }
    if (sum!=0) {result[k]=sum;k=k+1;}

    for (i=0;i<k;i++) result[i]+='0';
    for (i=k-1;i>=0;i--) s[i]=result[k-1-i];
    s[k]
    ='\0';

    while(1)
    {
    if (strlen(s)!=strlen(a)&&s[0]=='0')
    strcpy(s,s
    +1);
    else
    break;
    }
    }




    4.精度计算——加法

    语法:add(
    char a[],char b[],char s[]);

    参数:

    a[]:
    被乘数,用字符串表示,位数不限

    b[]:
    乘数,用字符串表示,位数不限

    t[]:
    结果,用字符串表示

    返回值:
    null

    注意:



    空间复杂度为 o(n
    ^2)


    需要
    string.h

    源程序:



    void add(char a[],char b[],char back[])
    {
    int i,j,k,up,x,y,z,l;
    char *c;
    if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
    c
    =(char *) malloc(l*sizeof(char));
    i
    =strlen(a)-1;
    j
    =strlen(b)-1;
    k
    =0;up=0;
    while(i>=0||j>=0)
    {
    if(i<0) x='0'; else x=a[i];
    if(j<0) y='0'; else y=b[j];
    z
    =x-'0'+y-'0';
    if(up) z+=1;
    if(z>9) {up=1;z%=10;} else up=0;
    c[k
    ++]=z+'0';
    i
    --;j--;
    }
    if(up) c[k++]='1';
    i
    =0;
    c[k]
    ='\0';
    for(k-=1;k>=0;k--)
    back[i
    ++]=c[k];
    back[i]
    ='\0';
    }




    5.精度计算——减法

    语法:sub(
    char s1[],char s2[],char t[]);

    参数:

    s1[]:
    被减数,用字符串表示,位数不限

    s2[]:
    减数,用字符串表示,位数不限

    t[]:
    结果,用字符串表示

    返回值:
    null

    注意:



    默认s1
    >=s2,程序未处理负数情况


    需要
    string.h

    源程序:



    void sub(char s1[],char s2[],char t[])
    {
    int i,l2,l1,k;
    l2
    =strlen(s2);l1=strlen(s1);
    t[l1]
    ='\0';l1--;
    for (i=l2-1;i>=0;i--,l1--)
    {
    if (s1[l1]-s2[i]>=0)
    t[l1]
    =s1[l1]-s2[i]+'0';
    else
    {
    t[l1]
    =10+s1[l1]-s2[i]+'0';
    s1[l1
    -1]=s1[l1-1]-1;
    }
    }
    k
    =l1;
    while(s1[k]<0) {s1[k]+=10;s1[k-1]-=1;k--;}
    while(l1>=0) {t[l1]=s1[l1];l1--;}
    loop:
    if (t[0]=='0')
    {
    l1
    =strlen(s1);
    for (i=0;i<l1-1;i++) t[i]=t[i+1];
    t[l1
    -1]='\0';
    goto loop;
    }
    if (strlen(t)==0) {t[0]='0';t[1]='\0';}
    }
  • 相关阅读:
    八、基本数据结构(图形结构)
    七、基本数据结构(树形结构)
    4、使用 ImportTsv 将 Hive 数据导入 Hbase
    六、跳表
    五、二分法查找
    四、归并排序 && 快速排序
    一、kafka 介绍 && kafka-client
    三、排序之冒泡、插入、选择
    二、YARN
    三、synchronized & lock
  • 原文地址:https://www.cnblogs.com/void/p/2018736.html
Copyright © 2011-2022 走看看