View Code of Problem 3689

#include<stdio.h>
#include<string.h>
int main(){
	int t,i,j=0;
	char a[101],b[101],c[101];
	scanf("%d",&t);
	while(t--){
		j++;
		memset(a,'\0',sizeof(a));
		memset(b,'\0',sizeof(b));
		memset(c,'\0',sizeof(c));
		scanf("%s %s",a,b);
		int len1=strlen(a);
		int len2=strlen(b);
		int p1=len1-1;
		int p2=len2-1;
		int flag=0,k=0;//借位问题 
		if(len1>len2){
		for(;p1>=0&&p2>=0;p1--,p2--){
			int l1=a[p1]-'0';
			int l2=b[p2]-'0';
			if(flag==1){
				if(l1==0){
				l1=9;
				flag=1;
			}
				else{
				l1--;
				flag=0;
			}
		}
			if(l1<l2){
				flag=1;
			c[k++]=(l1+10-l2)+'0';	
			}
			else if(l1>=l2){
				c[k++]=l1-l2+'0';
			}
		}
		if(p1>=0){
			while(p1>=0){
				int q=a[p1]-'0';
				if(flag==1)
				{
				if(q==0){
				q=9;
				flag=1;
			}
			else{
					q--;
					flag=0;
				}
			}
				c[k++]=q+'0';
				p1--;
			}
		} 
	}
	else if(len1<len2){
			for(;p1>=0&&p2>=0;p1--,p2--){
			int l1=a[p1]-'0';
			int l2=b[p2]-'0';
			if(flag==1){
				if(l2==0){
				l2=9;
				flag=1;
			}
				else{
				l2--;
				flag=0;
			}
		}
			if(l2<l1){
				flag=1;
			c[k++]=(l2+10-l1)+'0';	
			}
			else if(l2>=l1){
				c[k++]=l2-l1+'0';
			}
		}
		if(p2>=0){
			while(p2>=0){
				int q=b[p2]-'0';
				if(flag==1)
				{
				if(q==0){
				q=9;
				flag=1;
			}
			else{
					q--;
					flag=0;
				}
			}
				c[k++]=q+'0';
				p2--;
			}
		}
		c[k++]='-'; 
	}
	else{
		if(strcmp(a,b)>=0){
		for(;p1>=0&&p2>=0;p1--,p2--){
			int l1=a[p1]-'0';
			int l2=b[p2]-'0';
			if(flag==1){
				if(l1==0){
				l1=9;
				flag=1;
			}
				else{
				l1--;
				flag=0;
			}
		}
			if(l1<l2){
				flag=1;
			c[k++]=(l1+10-l2)+'0';	
			}
			else if(l1>=l2){
				c[k++]=l1-l2+'0';
			}
		}
}
else{
	for(;p1>=0&&p2>=0;p1--,p2--){
			int l1=a[p1]-'0';
			int l2=b[p2]-'0';
			if(flag==1){
				if(l2==0){
				l2=9;
				flag=1;
			}
				else{
				l2--;
				flag=0;
			}
		}
			if(l2<l1){
				flag=1;
			c[k++]=(l2+10-l1)+'0';	
			}
			else if(l2>=l1){
				c[k++]=l2-l1+'0';
			}
		}
		c[k++]='-';
}
	}
	printf("Case #%d:\n",j);
	int k1=k-1;
	if(c[k1]=='0')
	{
		while(c[k1]=='0'){
			k1--;
		}
		if(k1<0)
		printf("0");
		else{ 
		for(i=k1;i>=0;i--)
	printf("%c",c[i]);
	}
	} 
 
	else if(c[k1]=='-'){
	    int k2=k1-1;
		for(;k2>=0&&c[k2]=='0';k2--);
		c[k2+1]=c[k1];
		for(i=k2+1;i>=0;i--)
	printf("%c",c[i]);	
	}
	else{
		for(i=k1;i>=0;i--)
	printf("%c",c[i]);
	}
	printf("\n");
}
} 

Double click to view unformatted code.


Back to problem 3689