zoukankan      html  css  js  c++  java
  • #C++初学记录(高精度运算)(加法)

    高精度运算
    不管是int还是double亦或者long long ,这些定义变量都有数据范围的一定限制,在计算位数超过十几位的数,也就是超过他们自身的数据范围时,不能采用现有类型进行计算,只能自己通过编写程序进行计算也就是高精度运算。
    程序代码

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
    	char a1[205],b1[205];//数组用来存储两个相加的数 
    	int a[205],b[205],c[205],lena,lenb,lenc=1,i,x=0;
    	memset(a,0,sizeof(a));//对字符串初始化 
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	gets(a1);
    	gets(b1);
    	lena=strlen(a1);//将数组长度赋值给len 
    	lenb=strlen(b1);
    	for(i=0;i<lena;i++)
    	a[lena-i]=a1[i]-'0';//将字符串通过ASCALL值转化为整形变量 
    	for(i=0;i<lenb;i++)
    	b[lenb-i]=b1[i]-'0';//通过倒序使数组两端的值互换 
    	while(lenc<=lena||lenc<=lenb)
    	{
    		c[lenc]=a[lenc]+b[lenc]+x;
    		x=c[lenc]/10;
    		c[lenc]%=10;
    		lenc++;
    	}
    	c[lenc]=x;
    	while(c[lenc]==0)//最高位的0要舍弃 
    	{
    		lenc--;
    	}
    	for(i=lenc;i>=1;i--)
    	{
    		cout<<c[i];
    	}
    	cout<<endl;
    	return 0;
    }
    
    

    需要注意的地方
    当一个输入的数据超过定义变量所支持的数据范围时(比如400位的数,一亿是9位数),用数组的方法更容易求所需求的的数据,用数组的一个空间来当作数的位数,即个位十位百位。这样用一个数组来储存一个数据,支持计算的数据范围更大,也简单易懂。
    代码解读
    memset() 函数常用于内存空间初始化,在代码的开头,我使用了memset()对数组进行初始化,即对数组a,b,c全部赋值为0。注意不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。在数组的创建之后,数组内剩余的空间会出现野值,若不清零,则在函数进行运算时会出现乱码。由于数组类型定义时是字符型,所以需要写一段代码进行转化,使之变为整形变量,使用高精度计算,数据的存入也有特殊方法,即倒序存入,通常开头第一个数据输入值是表示整个数据的长度,比如八位数据,则键入8。之后的数据从最高位到最低位一个一个排开单个键入。

  • 相关阅读:
    VMwareTools安装+CentOS分辨率调整
    WSDL文件示例及说明
    CentOS 5.4 服务器配置 yum安装Apache+php+Mysql+phpmyadmin
    linuxVi使用方法(备查)
    C++ 泛型算法定制操作
    C++ 迭代器分类
    求最长回文串的长度
    C++ 关联容器
    html标签之label
    转载div+css命名规范标准
  • 原文地址:https://www.cnblogs.com/xiaofengqaq/p/10574318.html
Copyright © 2011-2022 走看看