View Code of Problem 132

#include<stdio.h>
#include<string.h>
int main(){
	char a[400],b[400],c[401];
	int i,j;
	while(scanf("%s %s",a,b)!=EOF){
		int k1=0,k2=0;
		memset(c,'\0',sizeof(c));
		int flag=0,l=0;
		int len1=strlen(a);
		int len2=strlen(b);
		int p1,p2;
		p1=len1-1;
		p2=len2-1;
		for(i=0;i<len1;i++){
		if(a[i]=='.'){
		k1=i;
		break;
	}
	}
		for(i=0;i<len2;i++)
		{
			if(b[i]=='.'){
			k2=i;
			break;
		}
		 }
		 if(k1!=0&&k2!=0){
		 	
		 int t1=len1-k1-1;
		 int t2=len2-k2-1;
		 if(t1>t2){
		
		 	while(t1>t2){
		 		
		 		c[l++]=a[p1];
		 		t1--;
		 		p1--;
			 }
		 }
		 else if(t1<t2){
		 	while(t1<t2){
		 		c[l++]=b[p2];
		 		t2--;
		 		p2--;
			 }
		 }
		 for(;p1>=0&&p2>=0;p1--,p2--){//进位 
		 	if(a[p1]!='.'){
		 	int k=(a[p1]-'0')+(b[p2]-'0');
		 	if(flag==1){
		 	k++;
		    flag=0;
		 }
		 	if(k>9){
		 		flag=1;
		 		c[l++]=k-10+'0';
			 }
			 else
			 c[l++]=k+'0';
		 }
		 else{
		 	c[l++]='.';
		 }
	} 
	if(p1>=0){
		for(;p1>=0;p1--){
			int q=a[p1]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
	else if(p2>=0){
		for(;p2>=0;p2--){
			int q=b[p2]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
	if(flag==1)
	c[l++]='1';
	}
	else if(k1==0){
		for(;p2>=0;p2--){
			c[l++]=b[p2];
			if(b[p2]=='.')
			break;
		}
		p2--;
		for(;p1>=0&&p2>=0;p1--,p2--){
			
		 	int k=(a[p1]-'0')+(b[p2]-'0');
		 	if(flag==1){
		 	k++;
		    flag=0;
		 }
		 	if(k>9){
		 		flag=1;
		 		c[l++]=k-10+'0';
			 }
			 else
			 c[l++]=k+'0';
		 }
		 if(p1>=0){
		for(;p1>=0;p1--){
			int q=a[p1]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
	else if(p2>=0){
		for(;p2>=0;p2--){
			int q=b[p2]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
	if(flag==1){
		c[l++]='1';
	}
	}
	else if(k2==0){
		for(;p1>=0;p1--){
			c[l++]=a[p1];
			if(a[p1]=='.')
			break;
		}
		p1--;
		for(;p1>=0&&p2>=0;p1--,p2--){
			
		 	int k=(a[p1]-'0')+(b[p2]-'0');
		 	if(flag==1){
		 	k++;
		    flag=0;
		 }
		 	if(k>9){
		 		flag=1;
		 		c[l++]=k-10+'0';
			 }
			 else
			 c[l++]=k+'0';
		 }
		 if(p1>=0){
		for(;p1>=0;p1--){
			int q=a[p1]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
	else if(p2>=0){
		for(;p2>=0;p2--){
			int q=b[p2]-'0';
			if(flag==1){
				q++;
				flag=0;
			}
			if(q>9){
				flag=1;
				c[l++]=q-10+'0';
			}
			else
			 c[l++]=q+'0';
		}
	}
		if(flag==1){
		c[l++]='1';
	}
	}
	for(i=l-1;i>=0;--i){
		if(c[i]>='1'&&c[i]<='9')
		printf("%c",c[i]);
		else{
			if(c[i]=='.'){
				for(j=i-1;j>=0;--j){
					if(c[j]>='1'&&c[j]<='9')
					break;
				}
				if(j>=0)
				printf("%c",'.');	
			}
			else if(c[i]=='0'){
				for(j=i-1;j>=0;--j){
					if((c[j]>='1'&&c[j]<='9')||(c[j]=='.'))
					break;
				}
				if(j>=0)
				printf("%c",'0');
			}
		}
	}
	printf("\n");
	}
}
 

Double click to view unformatted code.


Back to problem 132