正整数高精度运算

加、减、乘、除

#include<iostream.h>
#include<string.h>
//using namespace std;

int Big(char* str1,char* str2);

char* ClearFrontZero(char* str);

void ToSameDigits(char* str1,char* str2);

char* Plus(char* str1,char* str2,char* str3=NULL);

char* Subtract(char* str1,char* str2,char* str3=NULL);

char* Multiply(char* str1,char* str2,char* str3);

char* Division(char* str1,char* str2,char* str3,char* str4);

int main()
{}

//实现
int Big(char* str1,char* str2)
{
	int len1=strlen(str1), len2=strlen(str2);
	if(len1>len2)
		return 1;
    if(len1==len2)
	{
		int judge=strcmp(str1,str2);
		if(judge>0)
			return 1;
	    if(judge==0)
			return 0;
	}
	return -1;
}

char* ClearFrontZero(char* str)
{
	char* p=str;
	while(*p=='0')
		p++;
	strcpy(str,p);
	if(str[0]=='\0')
	{
		str[0]='0';str[1]='\0';
	}
	return str;
}

void ToSameDigits(char* str1,char* str2)
{
	int i;
	int len1=strlen(str1), len2=strlen(str2);
	int len=len1>len2?len1:len2;
	int less=len-len1;
	for(i=len1;i>=0;i--)
		str1[i+less+1]=str1[i];
	for(i=0;i<=less;i++)
		str1[i]='0';
	less=len-len2;
	for(i=len2;i>=0;i--)
		str2[i+less+1]=str2[i];
	for(i=0;i<=less;i++)
		str2[i]='0';
}

char* Plus(char* str1,char* str2,char* str3)
{
	int len,i;
	if(str3==NULL)
		str3=str1;
	else
		strcpy(str3,str1);
	ToSameDigits(str3,str2);
	len=strlen(str3);
	for(i=len-1;i>=0;i++)
	{
		str3[i]=str3[i]+str2[i]-'0';
		if(str3[i]>'9')
		{
			str3[i]-=10; str3[i-1]+=1;
		}
	}
	ClearFrontZero(str2);
	return ClearFrontZero(str3);
}

char* Subtract(char* str1,char* str2,char* str3)
{
	int i;
	if(str3==NULL)
		str3=str1;
	else
		strcpy(str3,str1);
    ToSameDigits(str3,str2);
	int len=strlen(str3);
	for(i=len-1;i>=0;i--)
	{
		if(str3[i]<str2[i])
		{
			str3[i]+=10; str3[i-1]-=1;
		}
		str3[i]=str3[i]-str2[i]+'0';
	}
	ClearFrontZero(str2);
	return ClearFrontZero(str3);
}

char* Multiply(char* str1,char* str2,char* str3)
{
	int i;
	char j;
	int len1=strlen(str1), len2=strlen(str2);
	strcpy(str3,"0");
	for(i=len2-1;i>=0;i--)
	{
		for(j='0';j<str2[i];j++)
		{
			Plus(str3,str1); ClearFrontZero(str1);
		}
		str1[len1]='0'; str1[len1+1]='\0'; len1++;
	}
	str1[len1-len2]='\0';
	return ClearFrontZero(str3);
}

char* Division(char* str1,char* str2,char* str3,char* str4)
{
	int i;
	str3[0]=str4[0]='\0';
	if(strcmp(str2,"1")==0)
	{
		strcpy(str3,str1);
		str4[0]='0'; str4[1]='\0';
		return str3;
	}
	int len1=strlen(str1), len3=strlen(str3);
	for(i=0;i<len1;i++)
	{
		int len4=strlen(str4);
		str4[len4]=str1[i]; str4[len4+1]='\0';
		str3[len3]='0'; str3[len3+1]='\0';
		while(Big(str4,str2)!=-1)
		{
			str3[len3]+=1; Subtract(str4,str2);
			ClearFrontZero(str4); ClearFrontZero(str2);
		}
		len3++;
	}
	return ClearFrontZero(str3);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值