アルゴリズムの大数演算加減法ソースコード

20741 ワード

多くの小さなパートナーはコンピュータのプログラミングのアルゴリズムに興味を持っていますが、多くのコンテスト類のアルゴリズムのウェブサイトでは、大数演算は往々にして必ず試験されますが、教科書には基本的な言及がありませんので、今日はアルゴリズムの基本演算のソースコード(加減)を提供します.大数演算の多くはintの範囲を超えていることが多い.例えば、2の100回、100の100回など、あるいは問題メモリの制限を超えている場合、大数演算は大きく活躍するが、実は、大数演算は文字列の演算であり、構造体と結合している.だから、文字列と構造体に慣れていない仲間は、まずこの2つの知識点を復習することをお勧めします.くだらないことは言わないで、コードを捧げます
#include
#include   //        
using namespace std;
struct beg  //        
{
	int d[1000];  //       
	int len;   //       
	beg()  //           
	{
		memset(d,0,sizeof(d));
		len=0;
	}
};
struct beg change(char str[]);
struct beg add(beg a,beg b);
struct beg sub(beg a,beg b);
void show(struct beg c);
int com(beg a,beg b);

int main()
{
	beg a,b,c;
	char str1[1000],str2[1000];
	cin>>str1;
	cin>>str2;
	a=change(str1);
	b=change(str2);
	c=add(a,b);
	show(c);
	int i;
	i=com(a,b);
	if(i<0)   //    ,          
	{
		struct beg temp;
		temp=a;
		a=b;
		b=temp;
		c=sub(a,b);
		cout<<"-";  //      
		show(c); 
	}
	else 
	{
		c=sub(a,b);
		show(c);
	}
	return 0;
} 
//    ,          
struct beg change(char str[])
{
	beg a;
	a.len=strlen(str);
	for(int i=0;i<a.len;i++)
	{
		a.d[i]=str[a.len-i-1]-'0';   //     
	}
	return a;
}
//     
struct beg add(beg a,beg b)
{
	beg  c;
	int carry=0;  //carry        ,   0 
	for(int i=0;i<a.len||i<b.len;i++)
	{
		int temp=a.d[i]+b.d[i]+carry;   //          
		c.d[c.len++]=temp%10;   //     
		carry=temp/10;  //        
	}
	if(carry!=0)  //      0 
	{
		c.d[c.len++]=carry;
	}
	return c;
}
//    (      ) 
struct beg sub(beg a,beg b)
{
	beg c;
	for(int i=0;i<a.len||i<b.len;i++)
	{
		if(a.d[i]<b.d[i])   //             
		{
			a.d[i+1]--;   //     1 
			a.d[i]+=10;  //     10 
		}
		c.d[c.len++]=a.d[i]-b.d[i];   //     
	}
	while(c.len-1>=1&&c.d[c.len-1]==0)
	{
		c.len--;   //     0   ,         
	}
	return c;
}
//     
void show(struct beg c)
{
	for(int i=c.len-1;i>=0;i--)
	{
		cout<<c.d[i];
	}
	cout<<endl;
}
//       
int com(beg a,beg b)
{
	if(a.len>b.len)   return 1;
	else if(a.len<b.len)   return -1;
		else 
		{
			for(int i=a.len-1;i>=0;i--)
			{
				if(a.d[i]<b.d[i])   return -1;
				else  if(a.d[i]>b.d[i])   return 1;
 			}
		}
	return 0;
}

仲間たちはゆっくり噛んでこれらの知識を消化しましょう.