高精度减法

                                 **IBOCE      第二天练习**

高精度减法

题目描述

高精度减法。

输入格式

两个整数 a,b(第二个可能比第一个大)。

输出格式

结果(是负数要输出负号)。

样例 #1

样例输入 #1

2
1

样例输出 #1

1

提示

  • 20% 数据 a,b 在 long long 范围内;
  • 100% 数据 0<a,b<=10^(10086)
/*微瑕.没有把二个数相等情况放进compare函数*/
#include<stdio.h>                               
#include<string.h>
char S1[10086],S2[10086],S3[10086];          //数的输入(用字符数组)
int  a[10086],b[10086],c[10086];            //A-B=C
int compare (char S1[] ,char S2[]);        //比较两数大小 
void swap(char S1[] ,char S2[]);          //两数交换 
int main ()  
{
	int i,j,k,l,flag=0;                  //flag用来判断是否交换过 '1'为交换 
    int length_A,length_B,length_C;   //数的长度
    scanf("%s",S1);                  //高精度的数的输入 
    scanf("%s",S2);
    flag=compare(S1,S2);
    if(flag!=0)
    swap(S1,S2);
    length_A=strlen(S1);
    length_B=strlen(S2);
    for(i=0;i<length_A;i++)   //个、十、百...对应数组下标1、2、3
       a[length_A-i]=S1[i]-'0';
    for(j=0;j<length_B;j++)
       b[length_B-j]=S2[j]-'0';
    length_C=length_A;        //差'C'最大的长度
    for(k=1;k<=length_C;k++)
    {
        if(a[k]<b[k])
        {
           a[k+1]--;         //不够,向前借一 
           a[k]+=10;	         
		}
		c[k]=a[k]-b[k]; 
    }
    while(c[length_C]==0&&length_C>1)      //删除前导'0' 
    length_C--;
    if(strcmp(S1,S2)==0)               
	flag=0; 
    if(flag!=0)                    //不等于0说明交换过输出'-'                
    printf("-");
    for(l=length_C;l>0;l--)        //和'C'的输出
    {
    	printf("%d",c[l]);
	}
return 0;
}
int compare (char S1[] ,char S2[]) 
{
	int i,flag,length_1,length_2;
	length_1=strlen(S1);
	length_2=strlen(S2);
	if(length_1>length_2)
	return flag=0;
	if(length_1<length_2)
	return flag=1;
	if(length_1=length_2)
	{
	  for(i=0;i<length_1;i++)
	  {
	  	if(S1[i]!=S2[i]&&S1[i]>S2[i])  
	  	return flag=0;
	  	if(S1[i]!=S2[i]&&S1[i]<S2[i])
	  	return flag=1;
	  }	
	}
}
void swap(char S1[] ,char S2[])
{
	char S3[10086];
	strcpy(S3,S1);
	strcpy(S1,S2);
	strcpy(S2,S3);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值