C语言实现大整数加减 数组实现

思路导图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

#include<bits/stdc++.h>

void add(int* count_1,int *count_2,int *ans,int max)
{
    
    
	for(int now=0;now<max;now++)
	{
    
    
		ans[now]+=count_1[now]+count_2[now];//这一位的值加上第一个数组的该位值 再加上第二个数组的该位值 
		if(ans[now]>=10)//大于10就进位 
		{
    
    
			ans[now+1]+=1;//进一位
			ans[now]%=10;//留下个位 
		}
	} 
}

void sub(int* count_1,int *count_2,int *ans,int max)
{
    
    
	for(int now=0;now<max;now++)
	{
    
    
		ans[now]+=count_1[now]-count_2[now];//这一位的值等于第一个数组的该位值 减去第二个数组的该位值 
		if(ans[now]<0)//如果该位数字小于0 
		{
    
    
			ans[now]+=10;//借一位 加10 
			ans[now+1]--;//前一位-1; 
		}
	} 
} 

void print(int *ans,int max)
{
    
    
	bool kg=false;
	for(int now=max-1;now>=0;now--)
	{
    
    
		if(ans[now]!=0||kg==true)
		{
    
    
			printf("%d",ans[now]);	
			kg=true;
		}
	}	
}

int main()
{
    
    
	char string0[1000],*front,*after,sign;//输入的字符串 切割后的第一个字符串front 第二个字符串after 符号 
	scanf("%s",string0);
	for(int now=0;;now++)
	{
    
    
		if(string0[now]=='+')//找到加号 
		{
    
    
			sign='+';
			front=strtok_r(string0,"+",&after);//切割 
			break;
		} 
		else if(string0[now]=='-')//找到减号 
		{
    
    
			sign='-';
			front=strtok_r(string0,"-",&after);//切割 
			break;
		}
	}
	int n=strlen(front),m=strlen(after);//两个数的位数 用于下一行的最大位数的选择 
	int max;//最大位数 不超过两个数最大位数+1 
	if(n>m)//n比m大 
	{
    
    
		max=n+1;
	}
	else
	{
    
    
		max=m+1;
	}
	int count_1[max], count_2[max], ans[max];//第一个数的数组 第二个数的数组 答案 
	memset(count_1,0,sizeof(count_1));
	memset(count_2,0,sizeof(count_2));
	memset(ans,0,sizeof(ans));//每一位都初始化为0  

	for(int now=0;now<n;now++)
	{
    
    
		count_1[now]=front[n-now-1]-'0';
	}
	for(int now=0;now<m;now++)
	{
    
    
		count_2[now]=after[m-now-1]-'0';
	} 

	printf(" = ");
	if(sign=='+')
	{
    
    
		add(count_1,count_2,ans,max);
	}
	else
	{
    
    
		if(n>m)// 1 比 2 长 
		{
    
    
			sub(count_1,count_2,ans,max);
		}
		else if(n==m)//一样长 
		{
    
    
			bool state=false;
			for(int a=max-1;a>=0&&state==false;a--)
			{
    
    
				if(count_1[a]>count_2[a])
				{
    
    
					sub(count_1,count_2,ans,max);
					state=true;
				}
				else if(count_1[a]<count_2[a])
				{
    
    
					printf("-");
					sub(count_2,count_1,ans,max);
					state=true;
				}
			}
			if(state==false)
			{
    
    
				printf("0");
			}
		}
		else//1 比 2 短 
		{
    
    
			printf("-");
			sub(count_2,count_1,ans,max);
		}
	}
 	print(ans,max);
	
	
	return 0;
} 


猜你喜欢

转载自blog.csdn.net/qq_45698148/article/details/109063213
今日推荐