高精度 加减乘 阶乘 模板 ------------------------C语言——菜鸟级

举报
Fivecc 发表于 2022/08/05 23:53:07 2022/08/05
【摘要】 long int res[N]; void add(long int *a,long int *b)//高精度加法 {long int i,k=0,adw=0,flag=0,tem1,tem2; ...
long int res[N];
void add(long int *a,long int *b)//高精度加法 
{long int i,k=0,adw=0,flag=0,tem1,tem2;
    for(i=0;flag!=2;i++,k++)
        { if(a[i]==-1)tem1=0;else tem1=a[i];
           if(b[i]==-1)tem2=0; else tem2=b[i];
          res[k]=tem1+tem2+adw;//adw 进位位 
          adw=res[k]/10000;
          res[k]=res[k]%10000;
          if(a[i+1]==-1)flag++; 
          if(b[i+1]==-1)flag++;
        }if(adw)res[k++]=adw;//判断进位是否有值 
        res[k+1]=-1;//标记最高位 }
void sub(long int *a,long int *b)//高精度 减法 
{ long int tem,i,k=0,subw=0,flag=0;
    for(i=0;flag!=2;i++)
        {    if(b[i]==-1)tem=0;else tem=b[i];
             if(a[i]>=(tem+subw))res[k++]=a[i]-tem-subw,subw=0;//subw借位位 
             else res[k++]=10000+a[i]-tem-subw,subw=1;
             if(a[i+1]==-1)flag++;
             if(b[i+1]==-1)flag++;
        }
      while(res[k]<=0&&k>0)res[k]=0,k--;//去首位0 
        res[k+1]=-1;//标记最高位 
}
void mult(long int *a,long int *b)//高精度 乘法 
{   long int i,j,k;
    for(i=0;a[i]!=-1;i++)
    { 
      for(j=0;b[j]!=-1;j++)
      { res[i+j]+=a[i]*b[j];
if(res[i+j]>=10000)res[i+j+1]+=res[i+j]/10000,res[i+j]%=10000;
      }
        k=i+j+1; 
while(res[k]>=10000)res[k+1]+=res[k]/10000,res[k]%=10000,k++;
    }while(res[k]<=0&&k>0)k--;//去首位0 
    res[k+1]=-1;   }
void dsjc(long int n)//计算阶乘
{  long int i,j,m;long long int a[n];
      memset(a,0,sizeof(a));
      a[0]=1; j=0;m=0; //初始化
       do//计算阶乘 从 n 到 1 反计算
       { for(i=j=0;i<=m;i++)
         j+=a[i]*n,a[i]=j%C,j/=C;//C 为进制 此时 为 5位(100000)
       j?a[++m]=j:0;//判断是否进位
     }while(--n);
     printf("%ld",a[m]);//输出
     while(m) printf(" %05ld ",a[--m]);printf("\n");}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

文章来源: fivecc.blog.csdn.net,作者:Five-菜鸟级,版权归原作者所有,如需转载,请联系作者。

原文链接:fivecc.blog.csdn.net/article/details/80542754

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。