zoukankan      html  css  js  c++  java
  • 大数相加基于字符串

    大数相加基于字符串

    /**
      * @name   Big_Number_Add
      * @brief  基于字符串的大数相加函数
      * @author Velscode 
      * @para   R[] is the string of result of A+B
      */
    void Big_Number_Add( char A[], char B[], char R[] )
    {
    	long long int len_a = 0, len_b = 0,i,j;
    	unsigned char carry_bit = 0, next_carry_bit = 0 ;
    	char * p;
    	
    	//calculate length of A[]
    	p = A;
    	
    	while( *p != '\0' )
    	{
    		p++;
    		len_a++;
    	}
    	
    	
    	//calculate length of B[]
    	p = B;
    	
    	while( *p != '\0' )
    	{
    		p++;
    		len_b++;
    	}
    	
    	if( len_a >= len_b )
    	{
    		R[len_a+1] = '\0';
    		
    		for( i = 0; i < len_b; i++)
    		{
    			R[len_a-i] =      ( (A[len_a-1-i] - '0' + B[len_b-1-i] - '0') + carry_bit ) % 10 + 48;
    			next_carry_bit =  ( (A[len_a-1-i] - '0' + B[len_b-1-i] - '0') + carry_bit ) / 10;
    			carry_bit = next_carry_bit;
    		}
    		
    		for( ; i < len_a; i++)
    		{
    			R[len_a-i] =      ( (A[len_a-1-i] - '0') + carry_bit ) % 10 + 48;
    			next_carry_bit =  ( (A[len_a-1-i] - '0') + carry_bit ) / 10 ;
    			carry_bit = next_carry_bit;
    		}
    		
    		if( carry_bit != 0 )
    			R[0] = carry_bit + 48;
    		else
    		{
    			for(i=0;i<len_a;i++)
    				R[i] = R[i+1];
    		
    			R[i] = '\0';
    		}
    
    	}
    	
    	if( len_a < len_b )
    	{
    		R[len_b+1] = '\0';
    		
    		for( i = 0; i < len_a; i++)
    		{
    			R[len_b-i] =      ( (A[len_a-1-i] - '0' + B[len_b-1-i] - '0') + carry_bit ) % 10 + 48;
    			next_carry_bit =  ( (A[len_a-1-i] - '0' + B[len_b-1-i] - '0') + carry_bit ) / 10;
    			carry_bit = next_carry_bit;
    		}
    		
    		for( ; i < len_b; i++)
    		{
    			R[len_b-i] =      ( (B[len_b-1-i] - '0') + carry_bit ) % 10 + 48;
    			next_carry_bit =  ( (B[len_b-1-i] - '0') + carry_bit ) / 10 ;
    			carry_bit = next_carry_bit;
    		}
    		
    		if( carry_bit != 0 )
    			R[0] = carry_bit + 48;
    		else
    		{
    			for(i=0;i<len_b;i++)
    				R[i] = R[i+1];
    		
    			R[i] = '\0';
    		}
    
    	}
    		
    	return ;
    }
    
    如果你对本博客有任何的疑问或者建议,欢迎联系作者:QQ944273070
  • 相关阅读:
    树状数组 P3368【区间更新 单点查询】
    线段树 P3374 【单点修改 区间查询】
    线段树 P2574 【区间修改 区间查询】
    线段树 P4588 【线段树用法】
    eclipse连接mysql数据库实现怎删改查操作实例(附带源码)
    软件设计师考试 算法设计
    数据库设计
    面向对象设计
    数据流图设计
    个人总结与对老师的评价
  • 原文地址:https://www.cnblogs.com/velscode/p/10003718.html
Copyright © 2011-2022 走看看