大数加法 减法 乘法 除法 高精度四则运算

1. 加法

输入采用字符数组保存,然后将输入存在整形数组里,然后逐位相加即可,同时注意进位处理。

#include 
#include 

int main()
{
    char m[555],n[555];
    int i,len_m,len_n,len_max,k;
    int a[555]={0},b[555]={0},c[555]={0};
    scanf("%s",m);
    len_m =strlen(m);
    for(i=0;i<=len_m -1;i++)
        a[i]=m[len_m -1 -i]-'0';
    scanf("%s",n);
    len_n=strlen(n);
    for(i=0;i<=len_n -1;i++)
        b[i]=n[len_n -1 -i]-'0';
    if(len_m>len_n)
        len_max=len_m;
    else
        len_max=len_n;
    k=0;
    for(i=0;i<=len_max -1;i++)
    {
        c[i]=(a[i]+b[i]+k)%10;
        k=(a[i]+b[i]+k)/10;
    }
    if(k!=0)	c[len_max]=1;
    if(c[len_max]==1)	printf("1");
    for(i=len_max -1;i>=0;i--)
        printf("%d",c[i]);
    return 0;
}


2. 减法

原理同加法一样(不确定两个数的大小关系)

比较两数大小:先比较长度,再按位比较(按位比较没写)

#include 
#include 

int main()
{
    char m[555],n[555];
    int i,len_m,len_n;
    int a[555]={0},b[555]={0};
    scanf("%s",m);
    len_m =strlen(m);
    for(i=0;i<=len_m -1;i++)
        a[i]=m[len_m -1 -i]-'0';
    scanf("%s",n);
    len_n=strlen(n);
    for(i=0;i<=len_n -1;i++)
        b[i]=n[len_n -1 -i]-'0';
    if(len_m < len_n)	
    { 
    	printf("-");
    	for(i=0;i=0;i--)
        	printf("%d",b[i]);
	}
	else
	{
    	for(i=0;i=0;i--)
        	printf("%d",a[i]);
    }
    return 0;
}


3. 乘法

 原理上也是采用数组模拟。

 a[i]123

 b[j]  12

 用c[k]来保存每次的运算结果,k=i+j;

 c[i+j]=c[i+j]+a[i]*b[j];

 这里来模拟一次乘法过程:

             123

        *     12

       -------------

              246   

        +    123

       -------------

             1476

#include 
#include 

int main()
{
    char m[555],n[555],temp[555];
    int i,j,len_m,len_n;
    int a[555]={0},b[555]={0},c[1111]={0};
    scanf("%s",m);
    scanf("%s",n);
    if(strlen(m)=10)
    	{
    		c[i+1]+=c[i]/10;
    		c[i]%=10;
		}
	i=2*len_m;
	while(c[i]==0)	i--;
	if(i<0)	printf("0");
	else	
	{
		for(;i>=0;i--)
			printf("%d",c[i]);
	}
    return 0;
}


4. 除法

除法也是利用数组模拟,不过这里不是直接按照除法的运算来,而是把除法转变为减法运算,从而求得结果。

#include 
#include 

int len1,len2;
char s1[905],s2[905];
int re[905];

void sub()
{
    int i=0,j;
    while(1)
    {
        if(s1[i]=='0')	i++;
        else
        {
			j=i;
            break;
        }
    }
    for(;ij;i--)    		//低位开始检测是否小于0
        if(s1[i]<'0')
        {
            s1[i]+=10;
            s1[i-1]--;
        }
}

int main()
{
    int i,p;
    scanf("%s%s",s1,s2); 
    len1=strlen(s1);
    len2=strlen(s2);
    if(len1=0)      //一直进行减法,直到不能减为止
        {
            sub();
            re[p]++;
        }
        p++;
        if(len1==len2)	break;
        for(i=len2-1;i>=0;i--)             //在s2前面补0,以便进行减法运算
            s2[i+1]=s2[i]; 
        s2[0]='0';
        len2++;
        s2[len2]='\0';
    }
    i=0;
    while(1)
    {
        if(re[i]==0)	i++;
        else			break;
    }
    for(;i



你可能感兴趣的:(高精度模板)