zoukankan      html  css  js  c++  java
  • ACM: A + B Problem II (两个大整数相加)

    Code:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define MAX 1000
    //给数组赋值
    void arrV(int a[],int len,int p){
    	int i;
    	for(i=0;i<len;i++){
    		a[i]=p;
    	}
    }
    
    //打印数组中的运算结果
    void printRverse(int a[]){	
    	int len=0,i=0;
    	while(a[i]!=-1){
    		len++;
    		i++;
    	}
    	for(i=len-1;i>-1;i--){
    		printf("%d",a[i]);
    	}
    }
    
    //两个数组相加
    void arrSum(int a[],int b[],int s[],int len_a,int len_b){
    	int jin=0,i=0,j=0,temp;
    	int len=len_a<=len_b?len_a:len_b;
    	for(;i<len;i++){
    		temp=a[i]+b[i];
    		if(temp<9){
    			s[i]=jin==0?temp:temp+1;
    			jin=0;
    		}else if(temp==9){
    			if(jin==0){
    				s[i]=temp;
    				jin=0;
    			}else{
    				s[i]=0;
    				jin=1;
    			}
    		}else{
    			s[i]=jin==0?temp%10:temp%10+1;
    			jin=1;
    		}
    		//printf("%d=[%d]
    ",i,s[i]);
    	}
    	if(len_a>len_b){
    		while(i<len_a){
    			if(jin==0){
    				s[i]=a[i];
    			}else{
    				if(a[i]<9){
    					s[i]=a[i]+1;
    					jin=0;
    				}else if(a[i]==9){
    					s[i]=0;
    					jin=1;
    				}
    			}
    			i++;
    		}
    		if(jin==1){
    			s[i]=1;
    		}
    	}else{
    		while(i<len_b){
    			if(jin==0){
    				s[i]=b[i];
    				jin=0;
    			}else{
    				if(b[i]<9){
    					s[i]=b[i]+1;
    					jin=0;
    				}else if(b[i]==9){
    					s[i]=0;
    					jin=1;
    				}
    			}
    			i++;
    		}
    		if(jin==1){
    			s[i]=1;
    		}
    	}
    
    }
    
    //将读入的字符串转入到整型数组中
    void charToArray(char *p,int a[],int *len){
    	int i,j=0;
    	*len=strlen(p);
    	for(i=*len-1;i>-1;i--){
    		a[j]=p[i]-48;
    		j++;
    	}
    }
    
    
    int main(){
    	int n,a[MAX],b[MAX],s[MAX],i=1,j=0,len_a,len_b;
    	char p[MAX],q[MAX];
    	
    	scanf("%d",&n);
    	while(n>0){
    		arrV(a,MAX,-1);
    		arrV(b,MAX,-1);
    		arrV(s,MAX,-1);
    		scanf("%s %s",p,q);
    		charToArray(p,a,&len_a);
    		charToArray(q,b,&len_b);
    		arrSum(a,b,s,len_a,len_b);
    		printf("Case %d:
    ",i);
    		printf("%s + %s = ",p,q);
    		printRverse(s);
    		printf("
    ");
    		if(n>1){
    			printf("
    ");
    		}
    		i++;
    		n--;
    	}
    	
    	
    	return 1;
    }
    

      

  • 相关阅读:
    (III)AOP:第六节:通知
    (III)AOP:第八节:多切面运行顺序
    (IV)JdbcTemplate
    (III)AOP:第三节:AOP配置与使用
    (III)AOP:第十节:AOP 总结
    (III)AOP:第二节:AOP概述
    (III)AOP:第四节:切入点表达式
    (III)AOP:第九节:XML配置切面
    (III)AOP:第五节:当前连接点
    7月3号
  • 原文地址:https://www.cnblogs.com/sallybin/p/3905760.html
Copyright © 2011-2022 走看看