• 大数相加基于字符串


    大数相加基于字符串

    /**
      * @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
  • 相关阅读:
    HTTP 协议详解
    HTTP抓包工具之Fiddler
    C#网络编程(订立协议和发送文件)
    C#编程总结(十)字符转码
    通信协议:HTTP、TCP、UDP
    C# 对象、文件与二进制串(byte数组)之间的转换
    从输入URL 到页面加载完成的过程
    java动手动脑
    大道至简第二章读后感
    《大道至简》第一章 读后感
  • 原文地址:https://www.cnblogs.com/velscode/p/10003718.html
Copyright © 2020-2023  润新知