关于大数加减乘除方面的感想

<p>1.大数加法</p>
# include <stdio.h>
# include <string.h>
void zhuanghuan (char r[],int n,int d[])//首先将字符数组转化为整型,并将他们的长度补齐。 
{	
  int j=204,i;
  for(i=n-1;i>=0;i--)
{
d[j--]=r[i]-'0';
}
}
int qingchu (int a[])//将前面多余的前导0去掉 
{
	int q=0,i;
	for(i=0;i<204;i++)
	{
		if(a[i]==0)
		{
			q++;
		}
		if(a[i]!=0)
		break;
	}
	return q;
}
int main()
{
  char a[205],b[205];
  int d[205]={0},e[205]={205},c[205]={0},w1,w2,m,i,j,k=0;
  gets(a);
  gets(b);
  w1=strlen(a);
  w2=strlen(b);
  zhuanghuan(a,w1,d);
  zhuanghuan(b,w2,e);
  for(i=204;i>0;i--)//进行累加,大数加法的核心算法。用一个k来表示进位。 
  {
  	c[i]=d[i]+e[i]+k;
  	k=c[i]/10;
  	c[i]=c[i]%10;
 }
  m=qingchu(c);
  for(i=m;i<205;i++)
  printf("%d",c[i]);
  return 0;
}

2.大数减法

# include <stdio.h>
# include <string.h>
void zhuanghuan (char r[],int n,int d[])//首先将字符数组转化为整型,并将他们的长度补齐。
{	
  int j=204,i;
  for(i=n-1;i>=0;i--)
{
d[j--]=r[i]-'0';
}
}
int qingchu (int a[])//将前面多余的前导0去掉。 
{
	int q=0,i;
	for(i=0;i<204;i++)
	{
		if(a[i]==0)
		{
			q++;
		}
		if(a[i]!=0)
		break;
	}
	return q;
}
int main()
{
  char a[205],b[205];
  int d[205]={0},e[205]={205},c[205]={0},w1,w2,m,i,j,k=0;
  gets(a);
  gets(b);
  w1=strlen(a);
  w2=strlen(b);
  zhuanghuan(a,w1,d);
  zhuanghuan(b,w2,e);
  for(i=204;i>0;i--)//大数减法的核心算法,用一个k来表示对上一位进行减一操作。 
  {
  	if(d[i]-e[i]-k>=0)
  	{
	  c[i]=d[i]-e[i]-k;
	  k=0;
    }
  	else
  	{
	  c[i]=d[i]+10-e[i]-k;
  	  k=1;
	}
 }
  m=qingchu(c);
  for(i=m;i<205;i++)
  printf("%d",c[i]);
  return 0;
}
3.大数乘法

# include <stdio.h>
# include <string.h>
void zhuanghuan (char r[],int n,int d[])//首先将字符数组转化为整型,并将他们的长度补齐。
{	
  int j=204,i;
  for(i=n-1;i>=0;i--)
{
d[j--]=r[i]-'0';
}
}
int qingchu (int a[])//将前面多余的前导0去掉 
{
	int q=0,i;
	for(i=0;i<499;i++)
	{
		if(a[i]==0)
		{
			q++;
		}
		if(a[i]!=0)
		break;
	}
	return q;
}
void chengfa (int d[],int e[])//大数乘法核心算法 
{
  int c[500]={0},p[500]={0},p2[500]={0},w1,w2,i,j,m,r=0,q=0,k=0,f;
  for(i=204;i>=0;i--)
  {
  	m=r;
  	for(j=204;j>=0;j--)//首先对每一位进行乘法 
  	{
  		c[m]=d[j]*e[i]+k;
  		k=c[m]/10;
  		c[m]=c[m]%10;
  		m++;
	}
	k=0;
	for(f=q;f<500;f++)//让后利用q来达到向前一位相加的效果。 
	{
		p[f]=p[f]+c[f]+k;//对上一位进行累加 
		k=p[f]/10;
		p[f]=p[f]%10;
	}
	k=0;
	r++;
	q++;
  }
  j=0;
  for(i=499;i>=0;i--)
  {
    p2[j++]=p[i];
  }
  f=qingchu(p2);
  for(i=f;i<500;i++)
  {
  	printf("%d",p2[i]);
  }
}
int main()
{
  char a[205]={0},b[205]={0};
  int d[205]={0},e[205]={0},w1,w2;
  gets(a);
  gets(b);
  w1=strlen(a);
  w2=strlen(b);
  zhuanghuan(a,w1,d);
  zhuanghuan(b,w2,e);
  chengfa(d,e);
  return 0;
}
4.大数除法(求出商和余)

# include <stdio.h>
# include <string.h>//首先该算法的基本思路为将除数扩大倍数与被除数相等,然后与被除数反复相减
                    // 直到相减得到的数小于当前倍数的除数,将除数缩小一位倍数,在进行相减,
					//每次相减做一次判断,直到扩大的倍数为一倍时,结束循环。
					// 将当前倍数与当前累加的次数进行累加 得到的数即为商。
					//根据思路,此程序还可求出余数 
void zhuanghuan (char r[],int n,int d[])//首先将字符数组转化为整型,并将他们的长度补齐。
{ 
  int j=104,i;
  for(i=n-1;i>=0;i--)
{
d[j--]=r[i]-'0';
}
}
int compare(int a[],int b[])//将减去的数与当前倍数的除数进行比较 
{
  int c[105]={0},i,k=0;
  for(i=104;i>0;i--)
  {
   if(a[i]-b[i]-k>=0)
   {
   c[i]=a[i]-b[i]-k;
   k=0;
   }
   else
   {
   c[i]=a[i]+10-b[i]-k;
   k=1;
   }
  } 
  if(c[1]==0)
   return 1;
  else
   return -1;
}
void reduce (int a[],int r,int m,int d[])//将除数扩大倍数 
{
 int j,i;
 j=104-r;
 for(i=104;i>=105-m;i--)
   d[j--]=a[i];
}
int qingchu(int a[])//消除多余的前导0 
{
	int i,n=0;
	for(i=1;i<104;i++)
	{
		if(a[i]==0)
          n++;
		if(a[i]!=0)
		  break;
	}
	return n;
}
int main()
{
  char a[105],b[105];
  int d[105]={0},e[105]={0},m[105]={0},c[105]={0},add[105]={0},kz[105]={0},k=0,r,x=0,r1,i,w1,w2,num,num1;
  gets(a);
  gets(b);
  w1=strlen(a);
  w2=strlen(b);
  zhuanghuan(a,w1,d);
  zhuanghuan(b,w2,e);
  r=w1-w2;
  r1=104-r;
  kz[r1]=1;
if(w1<w2)
{  printf("add[0]\n");
    for(i=105-w1;i<105;i++)
 	printf("%d",d[i]);
}
  else
  {
  while(r1<=104)
  { 
    reduce(e,r,w2,m);//扩大到与被除数相同的倍数 
    if(compare(d,m)>0)//进行比较,如果成立 进行 
	{
     for(i=104;i>0;i--)
	 {  
     if(d[i]-m[i]-k>=0)
	 {
      c[i]=d[i]-m[i]-k;
      k=0;
	 }
     else
	 { 
      c[i]=d[i]+10-m[i]-k;
      k=1;
	 }
	 }
	 k=0;
     for(i=0;i<105;i++)
	 {
     d[i]=c[i];
	 }
     for(i=0;i<105;i++)//累加
	 {
       add[i]=add[i]+kz[i]+x;
	   x=add[i]/10;
	   add[i]=add[i]%10;
	 }
	 x=0;
	}
	else
	{
     for(i=0;i<105;i++)//改变倍数 
	 {
		 m[i]=0;
	 }
	 for(i=0;i<105;i++)
	 {
		 kz[i]=0;
	 }
	 r1++; 
	 kz[r1]=1;
	 r--;
    }
  }
  num=qingchu(add)+1;
  for(i=num;i<105;i++)
  {
	 printf("%d",add[i]);
  } 
  printf("\n");
  num1=qingchu(d)+1;
  for(i=num1;i<105;i++)
  {
  	printf("%d",d[i]);
  }
  return 0;
  }
}
通过编写我明白了函数分模块编写的重要性,也更加明白了一句话,程序是靠体力熬出来的,没有一天又一天的思考,自然就没有编出来的那一刻的喜悦。有时候你的思路是对的可有时侯一些自加自减的位置不对往往就会导致程序与你想要表达相差甚远。程序在编写过程当不顺心总会令人感到烦躁想要放弃,但你也要明白高手就是在你想要放弃时他却在咬牙坚持。加油!



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值