1.大数的加法

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

参数:

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

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

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

返回值: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';

      }

2.大数的减法 (未处理负数情况)

语法: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';}
}

3.大数的乘法  ---大数乘小数

语法: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';
}

4.大数的乘法  ---大数乘大数

语法: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;
}
}

5.大数的阶乘

语法: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;
}

6.大数的比较

语法:int compare(char a[],char b[]);

参数:

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

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

返回值: 0    a<b

1    a>b

2    a=b

源程序:

int compare(char a[], char b[])
{
int lena=strlen(a);
int lenb=strlen(b);
if(lena>lenb)
return 1;
else if(lena<lenb)
return 0;
for(int i=0;i<lena;i++)
{
if(a[i]>b[i])
return 1;
else if(a[i]<b[i])
return 0;
}
return 2;
}

最新文章

  1. jQuery组件开发之表格隔行选中效果实现
  2. 记CentOS-7-x86_64-DVD-1503与Windows7单硬盘双系统的安装
  3. 屠龙之路_任生活如何虐你,屠龙之路还得继续_SeventhDay
  4. U盘快速装ghost系统
  5. EF封装类,供参考!
  6. C语言-08-预处理器
  7. C#选择排序详解
  8. Android MVP模式
  9. [Machine Learning (Andrew NG courses)]II. Linear Regression with One Variable
  10. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6
  11. 基于visual Studio2013解决C语言竞赛题之0603打印素数
  12. springmvc中的几个问题
  13. 在动态链接库dll中弹出对话框
  14. 吴恩达《机器学习》课程笔记——第六章:Matlab/Octave教程
  15. ngnix和负载均衡
  16. 4,postman和newman的联合使用
  17. oracle数据导出以及导入
  18. Nginx实现url请求不区分大小写
  19. cf280C. Game on Tree(期望线性性)
  20. Java、C#双语版HttpHelper类(解决网页抓取乱码问题)

热门文章

  1. Navicat连接MySQL数据库的一些问题与解决方案
  2. JAVAFX-6 面板总结
  3. MySQL存储过程的动态行转列
  4. C数据结构与算法-算法复杂度
  5. Python 2.x和3.x不同点
  6. VMWare复制虚拟机系统后,模块“Disk”无法启动【转】
  7. 【Linux】linux下vi命令大全
  8. CentOS-7.5 解决ifconfig报错
  9. C#中动态创建数据库和数据表,很经典【转】
  10. .net 向新页面跳转的语句