⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subtract.cpp

📁 能实现大数的减法运算
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <stdio.h>

int abigerb(char numa[],char numb[])		//numa>numb,返回1;numa=numb;numa<numb,返回0。
	{
	int along=strlen(numa);
	int blong=strlen(numb);
	int i=0;
	if(along>blong)	return 1;
	if(along==blong)
	{
		while(i<along)
		{
		if(numa[i]>numb[i])	return 1;
		else if(numa[i]<numb[i])	return 0;
		else { i++; }
		}
		return 2;
	}
	return 0;
	}


void subtract(char numa[],char numb[])
{
//	cout<<abigerb(numa,numb)<<endl;
	char result[20001];//多出一位用来存储正负号
	char temp[20000];
	int along=strlen(numa);
	int blong=strlen(numb);
	int carry=0;
	int temp_result;
	if(abigerb(numa,numb)==0)	//将numa和numb交换,始终用较大的减去较小的				 
		{
		along=strlen(numb);
		blong=strlen(numa);
		strcpy(temp,numa);
		strcpy(numa,numb);
		strcpy(numb,temp);
		result[0]='-';			//numa<numb,结果数组首位记录负号
		}
	else result[0]=' ';		//记录空格
	int tempalong=along;	//along在循环过程中会有变化,但在输出结果时又要用到!!!!!!
//	cout<<result[0]<<endl;
//	cout<<"along"<<along<<endl;
//	cout<<"blong"<<blong<<endl;
	while(along)
	{
		if(blong>0)
		{
			if((numa[along-1]-carry)>=numb[blong-1])
			{
			temp_result=(numa[along-1]-48)-carry-(numb[blong-1]-48);
			result[along]=temp_result+48;
			carry=0;
			along--;
			blong--;
			}
			else
			{
			temp_result=(numa[along-1]-48)+10-(numb[blong-1]-48)-carry;
			result[along]=temp_result+48;
			carry=1;
			along--;
			blong--;
			}
		}
		else
		{
			if((numa[along-1]-carry)>=48)
			{
			temp_result=(numa[along-1]-48)-carry;
			result[along]=temp_result+48;
			carry=0;
			along--;
			}
			else
			{
			temp_result=(numa[along-1]-48)+10-carry;
			result[along]=temp_result+48;
			carry=1;
			along--;
			}		
		}

		
/*		cout<<"temp_result"<<temp_result<<endl;
		cout<<"carry"<<carry<<endl;
		cout<<"along"<<along<<"result[along]"<<result[along]<<endl;*/
/*		along--;
		blong--;
		if(blong<0)		numb[blong]=48;*/
	}
	//消除无价值的零

		int i=1;
		int count=0;			//计数,结果中无价值零的个数
		while(result[i]=='0')
		{
			count++;
			i++;
		}		

	for(i=1;i<=tempalong-count;i++)
		result[i]=result[count+i];

	for(i=0;i<=tempalong-count;i++)
		cout<<result[i];
}

void main()
{
	char numa[20000],numb[20000];
	char yunsuanfu;
	cout<<endl<<"please write in A:";
	cin>>numa;
	cout<<endl<<"please write in B:";
	cin>>numb;
	cout<<endl<<"please write in yunsuanfu:";
	cin>>yunsuanfu;
	switch(yunsuanfu)
	{
	case '-': subtract(numa,numb);	break;
	default:  break;
	}
//	cout<<abigerb(numa,numb)<<endl;;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -