码迷,mamicode.com
首页 > 其他好文 > 详细

大数相加—位运算

时间:2014-12-19 17:33:31      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:大数相加   位运算   

本文整理了C语言中大数据的相加算法,基于位运算来实现。亲测可用。

//100位大数相加

#include <stdio.h>  
#include <string.h>  
      
#define Max 101//有进位101  

int bigNumAdd(char a[],char b[],char sum[])  
{
    int i=0;  
    int c=0;//表示进位  

    //清0
    char m[Max]={0};  
    char n[Max]={0}; 
    memset(sum,0,101);  
      
    //字符串反转且字符串变数字  
    int lenA=strlen(a);  
    int lenB=strlen(b);
	       
    int result_len = (lenA > lenB)?lenA:lenB;  

    for (i=0;i<lenA;i++)  
    {  
       m[i]=a[lenA-i-1]-'0';  
    }  
    for (i=0;i<lenB;i++)  
    {  
       n[i]=b[lenB-i-1]-'0';  
    }  
      
    //位运算:如果最后一位进位len+1  
    for (i=0;i<result_len;i++)  
    {  
       sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位  
       c=(m[i]+n[i]+c)/10;//得到进位
    }  

    //最后一次有进位,要把进位后的那一位赋值为1,并且sum总长度加1  
    if (c)  
    { 
	sum[result_len]=c+'0'; 
	result_len++;        
    }  
  
    return result_len; 
}   


void print(char sum[],int result_len)  
{  
    int i;   

    for(i=result_len-1; i>=0; i--)  
    {  
        printf("%c",sum[i]);  
    }  
    puts("\n");  
} 

int main()  
{ 
    char a[Max];  
    char b[Max];  
    char sum[Max];  
    puts("input a:");  
    gets(a);  
    puts("input b:");  
    gets(b);  
    print(sum,bigNumAdd(a,b,sum));  
    return 0;  
}  

      
 

上述代码只适用正数的大数相加,相减或者负数等原理一样,大家自己整理学习下。


测试一组数据如下:

技术分享


大数相加—位运算

标签:大数相加   位运算   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/42028825

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!