zoukankan      html  css  js  c++  java
  • [C++]超高位数的高精度算法-加法 用于完美(划掉)解决爆内存问题

    高精度加法

    原理:

    将数字分成数组存入,逐位相加

    原来int的要开很大的,如10000000000000000,或者有些long long都不够,在char里面只要17位

    Q:为什么?

    A:因为原来是将一个数存入,现在分成字符存入数组,进行加法运算

    首先将读入的字符存入int数组

    读入数据1:

    
    	for(int i=1;i<=a[0];i++){
    		a[i]=a1[a[0]-i]-'0';
    	}
    

    读入数据2:

    
    	for(int j=1;j<=b[0];j++){
    		b[j]=b1[b[0]-j]-'0';
    	}
    	

    读入之后

    c数组负责加法运算

    lenc是c的长度

    x是进位的多少,如果这个数小于10,除以10是0

    都懂吧?

    	while(lenc<=e){
    	
    		c[lenc]=a[lenc]+b[lenc]+x;
    			x=c[lenc]/10;
    			c[lenc]%=10;
    			lenc++;
    		
    		
    }

    然后输出: 

    	for(int i=lenc;i>=1;i--){
    	printf("%d",c[i]);
    	}

    整段代码:

    #include<cstdio>
    #include<string>
    using namespace std;
    	char a1[100],b1[100];
    int a[100],b[100],c[100],x=0,e,lenc=1;
    int maxaaa(int a,int b){
    	if(a>b){
    		return a;
    	}else return b;
    }
    int main(){
    	
    	gets(a1);
    	gets(b1);
    	a[0]=strlen(a1);
    	b[0]=strlen(b1);
    	e=maxaaa(a[0],b[0]);
    	for(int i=1;i<=a[0];i++){
    		a[i]=a1[a[0]-i]-'0';
    	}
    	for(int j=1;j<=b[0];j++){
    		b[j]=b1[b[0]-j]-'0';
    	}
    	while(lenc<=e){
    	
    		c[lenc]=a[lenc]+b[lenc]+x;
    			x=c[lenc]/10;
    			c[lenc]%=10;
    			lenc++;
    		
    		
    }
    if(c[lenc]==0){
    	lenc--;
    }
    
    	for(int i=lenc;i>=1;i--){
    	printf("%d",c[i]);
    	}
    	
    	
    	return 0;
    }
  • 相关阅读:
    学习笔记
    display:inline、block、inline-block的区别
    响应式布局设计
    CSS中position属性三大定位方式讲解
    CSS position 属性 一定要有width
    JQuery中each()怎么跳出
    JSON 学习笔记
    【转】30个你不可不知的CSS选择器
    HTML文档类型的作用,文档类型有多少种?
    jQuery中children()与find()的区别
  • 原文地址:https://www.cnblogs.com/shadowwolf/p/12943798.html
Copyright © 2011-2022 走看看