高精度算法--大数相加实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


提示:这里可以添加本文要记录的大概内容:

#include<stdio.h>
#include<string.h>
int addnumber_inverted(char result[],char s1[],char s2[]);
int multiple_x_single(char result[],char x1[],char multiplier);
int multiple_x_10(char result[],char x1[]);
int multiple_x_many(char result[],char x1[],char x2[]);
void reverse_string(char s[]);
char mid_result[400]={0},number[400];
char add_result[400]={0},num1[400]={0},num2[400]={0},multinum,last_result[400];
int ad[400],fl=0;
int main()
{
	printf("请输入第一个数字:\n");
	scanf("%s",num1);
	printf("请输入第二个数字:\n");
	scanf("%s",num2);
	reverse_string(num1);
	reverse_string(num2);
	//printf("yy:%s\nyy:%s\n",num1,num2);
	//num1[0]=num1[0]+1;
	//printf("num1:%s\n\n",num1);
	addnumber_inverted(add_result,num1,num2);
	reverse_string(add_result);
	printf("两者相加的结果为:\n");
	if(fl) printf("1");
	printf("%s",add_result);
}
int addnumber_inverted(char result[],char s1[],char s2[])//int
{
	int s1_length,s2_length,length,x,i,pos,mn,mx;
	i=0;
	while(s1[i]!='\0')
	{
		i++;
	}
	s1_length=i-1; //printf("s1:%d\n\n",i-1);
	i=0;
	while(s2[i]!='\0')
	{
		i++;
	}
	s2_length=i-1;  //printf("s2:%d\n\n",i-1);
	if(s1_length>s2_length)
	{
		mx=s1_length;
		mn=s2_length;
		strcpy(mid_result,s1);
		strcpy(number,s2);
		
	}else{
		mx=s2_length;
		mn=s1_length;
		strcpy(mid_result,s2);
		strcpy(number,s1);
	}
	pos=0;
	//printf("mx:%d mn:%d\n\n",mx,mn);
	while(pos<=mx)
	{
	//	printf("add:%d\n",ad[pos]);
		if(pos<=mn) x=mid_result[pos]-'0'+number[pos]-'0'+ad[pos];
		else x=mid_result[pos]-'0'+ad[pos];
		//printf("x:%d\n",x);
		//if(x>9)
		{
			mid_result[pos]=x%10+'0';
			
			/*if(mid_result[pos+1]!=0)
			{
				mid_result[pos+1]=x/10+mid_result[pos+1];
			}else{
				mid_result[pos+1]=x/10+'0';
			}*/
			ad[pos+1]=x/10;//printf("mid:%s\n",mid_result);
			pos++;
		}
		//printf("pos:%d\n",pos);
		
	/*	while(mid_result[pos]>'9')
		{
			x=mid_result[pos]-'0';
			mid_result[pos]=x%10+'0';
			if(mid_result[pos+1]!=0)
			{
				mid_result[pos+1]=x/10+mid_result[pos+1];
			}else{
				mid_result[pos+1]=x/10+'0';
			}
			pos++;
		}*/
		
	}
	if(ad[pos]) fl=1;
	strcpy(result,mid_result);
}
void reverse_string(char s[])//int
{
	char mid[400]={0};
	int i=0,pos=0,length=0;
	while(s[i]!='\0')
	{
		i++;
	}
	length=i-1;
	for(i=length;i>=0;i--)
	{
		mid[i]=s[length-i];
	}
	for(i=0;i<=length;i++)
	{
		s[i]=mid[i];
	}
}

提示:以下是本篇文章正文内容,下面案例可供参考


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值