加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相加—位运算

发布时间:2020-12-14 02:52:30 所属栏目:大数据 来源:网络整理
导读:本文整理了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}; c

本文整理了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,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;  
}  

      
 

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


测试一组数据如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读