大数的加、减、乘、除、幂运算(C语言)

简介: 大数的加、减、乘、除、幂运算(C语言)

大数的加法运算:

大数的加法就是利用字符串输入然后转化为两个数组,然后相加存入另一个数组,如果大于10就要进一。

程序代码:

#include<stdio.h>
#include<string.h>
char s1[5000],s2[5000];
int a[5000],b[5000],c[10000];
int main()
{
  int i,j,k,n,m,t;
  while(scanf("%s%s",s1,s2)!=EOF)
  {
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    n=strlen(s1);
    m=strlen(s2);
    k=0;
    for(i=n-1;i>=0;i--)
      a[k++]=s1[i]-'0';
    k=0;
    for(i=m-1;i>=0;i--)
      b[k++]=s2[i]-'0';
    if(n<m)
      k=m;
    else
      k=n;
    t=k;
    for(i=0;i<k;i++)
    {
      c[i]=a[i]+b[i]+c[i];
      if(c[i]>=10)
      {
        c[i]=c[i]%10;
        c[i+1]=1;
        if(i+1==k)
          t=k+1;
      }
    }
    for(i=t-1;i>=0;i--)
      printf("%d",c[i]);  
    printf("\n");
  }
  return 0;
}

大数减法:

大数减法要保证大的减去小的,然后先比较大小写一个函数利用减法运算,运算时减不够的前位减1,后位加10.

程序代码:

#include<stdio.h>
#include<string.h>
char s[5000],s1[50000];
int a[50000],b[50000],c[50000];
void sub(int x[],int y[],int z)
{
  int i;
  for(i=0;i<z;i++)
  {
    c[i]=x[i]-y[i]+c[i];
    if(c[i]<0)
    {
      c[i]=10+c[i];
      c[i+1]=-1;
    }
  }
  for(i=z-1;i>=0;i--)
  {
    if(c[i]==0)
      z--;
    else
      break; 
  }
  for(i=z-1;i>=0;i--)
    printf("%d",c[i]);
  printf("\n");
}
int main() 
{
  int i,j,k,n,m,t;
  while(scanf("%s%s",s,s1)!=EOF)
  {
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    n=strlen(s);
    m=strlen(s1);
    k=0;
    for(i=n-1;i>=0;i--)
      a[k++]=s[i]-'0';
    k=0;
    for(i=m-1;i>=0;i--)
      b[k++]=s1[i]-'0';
    if(n>m)
      sub(a,b,n);
    else if(n<m)
    {
      printf("-");
      sub(b,a,m);
    }
    else
    {
      for(i=0;i<n;i++)
      {
        if(a[i]==b[i])
          continue;
        else if(a[i]>b[i])
        {
          sub(a,b,n);
          break;
        }
        else
        {
          printf("-");
          sub(b,a,n);
          break;
        }
      }
    } 
  }
  return 0;
}

大数乘法:

大数乘法跟大数加法类似,先乘后加,就是让每一次乘得的结果先存储到数组里面,因为两个数相乘最大位数也不过两个数的长度。

程序代码:

#include<stdio.h>
#include<string.h>
char s[5000],s1[5000];
int a[5000],b[5000],c[5000];
int main()
{
  int i,j,k,t,n,m,sum;
  while(scanf("%s%s",s,s1)!=EOF)
  {
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    n=strlen(s);
    m=strlen(s1);
    sum=n+m;
    k=0;
    for(i=n-1;i>=0;i--)
      a[k++]=s[i]-'0';
    k=0;
    for(i=m-1;i>=0;i--)
      b[k++]=s1[i]-'0';
    for(i=0;i<n;i++)
      for(j=0;j<m;j++)
        c[i+j]=c[i+j]+a[i]*b[j];  
    for(i=0;i<sum;i++)
    {
      if(c[i]>=10)
        c[i+1]=c[i+1]+c[i]/10;
      c[i]=c[i]%10;
    } 
    for(i=sum-1;i>0;i--)
    {
      if(c[i]==0)
        continue;
      else
        break;
    }
    while(i>=0)
    {
      printf("%d",c[i]);
      i--;
    }
    printf("\n");
  }
  return 0;
} 

大数幂:

大数幂也可以看成是大数乘法,可以把每一次乘得的结果作为每一次底数乘对象,然后循环n-1次。

程序代码:

#include<stdio.h>
#include<string.h>
char s[20];
int a[500000],b[500000];
int count=0;
void cheng(int a[],int b[],int m);
int main()
{
  int i,k,j,n,m;
  while(scanf("%s%d",s,&n)!=EOF)
  {
    
    if(s[0]=='0'&&n==0)
      break;
    if(n==0)
    {
      printf("1\n");
      continue;
    }
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    m=strlen(s);
    j=k=0;
    for(i=m-1;i>=0;i--)
    {
      a[k++]=s[i]-'0';
      b[j++]=s[i]-'0';
    }
    n--;
    while(n)
    {
      cheng(a,b,m);
      n--;
    }
    for(i=1005;i>0;i--)
    {
      if(b[i]==0)
        continue;
      else
        break;
    } 
    while(i>=0)
    {
      printf("%d",b[i]);
      i--;
    }
    printf("\n");
  }
  return 0;
}
void cheng(int a[],int b[],int m)
{
  int i,j,k;
  int c[5000];
  memset(c,0,sizeof(c));
  for(i=0;i<m;i++)
    for(j=0;j<1005;j++)
    { 
      c[i+j]=c[i+j]+a[i]*b[j];
    }
  for(i=0;i<1005;i++)
  {
    if(c[i]>=10)
      c[i+1]=c[i+1]+c[i]/10;
    b[i]=c[i]%10;
  }
}

大数除法:

这里由于大数除法比较麻烦,后面会接着有大数求余和大数阶层的时候详细讲解, 见谅!!!!!

相关文章
|
计算机视觉
直方图均衡化
直方图均衡化是一种图像处理技术,通过改变图像灰度级分布,增强图像对比度。手动实现包括计算灰度直方图、像素总数、灰度分布频率、累积分布频率,然后归一化映射到新灰度级,最终得到增强对比度的图像。该方法适用于改善灰度集中或明暗对比不明显的图像,但全局处理可能导致背景干扰增强,丢失细节,且某些图像可能过度增强。局部直方图均衡化可作为改进方案。
697 1
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
446 62
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
562 3
|
程序员 编译器
C 标准库 - <float.h>详解
`&lt;float.h&gt;` 是 C 标准库中的头文件,用于定义浮点数的属性和限制,包括有效数字位数(如 `FLT_DIG`)、最小最大值(如 `FLT_MIN` 和 `FLT_MAX`),以及特殊值(如 `FLT_INFINITY`)。它通过提供一系列常量和宏帮助程序员处理浮点运算的范围和精度问题。
|
NoSQL 编译器 C语言
【C 言专栏】C 语言中的调试技巧与工具
【5月更文挑战第6天】在C语言编程中,调试是必不可少的技能,涉及基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查和性能分析。通过分析问题、设置断点、逐步调试和检查逻辑来解决错误。调试时需保持耐心,合理选用工具,记录过程,并避免过度调试。熟练掌握这些技能将提升代码质量和开发效率。
435 0
【C 言专栏】C 语言中的调试技巧与工具
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
492 0
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
算法 调度 开发者
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
1782 0
|
C语言
C语言实现高精度(大位数)乘法
C语言实现高精度(大位数)乘法
302 0

热门文章

最新文章