• 高精度计算


    高精度计算采用模拟列竖式法。
    一般计算用正数,对于负数,处理符号位。

    1.高精度数的存储

    基本思想
    用数组存放和表示高精度整数。一个数组元素,存放高精度整数中的一位。
    为了便于计算,将数由低位到高位依次存在数组下标对应由低到高的位置上,其中,数组的第0个下标对应位置存储该数的位数。

    #include<stdio.h>
    #include<string.h>
    #define MAX_LEN 200
    int sz[MAX_LEN + 10];
    char szLine[MAX_LEN + 10];
    
    int main()
    {
    	int len, i;
    	scanf("%s", szLine);
    	memset(sz, 0, sizeof(sz));/*数组清零*/
    	sz[0] = strlen(szLine);
    	for (i = 1; i <= sz[0]; i++) {
    		sz[i] = szLine[sz[0] - i] - '0';
    	}
    	return 0;
    }
    

    2.高精度数比较

    int cmp(int a[], int b[]) {
    	int i;
    	if (a[0] > b[0]) {
    		return 1;
    	}
    	else if (a[0] < b[0]) {
    		return -1;
    	}
    	for (i = a[0]; i >= 1; i--) {
    		if (a[i] > b[i]) {
    			return 1;
    		}
    		else if (a[i] < b[i]) {
    			return -1;
    		}
    	}
    	return 0;
    }
    

    3.高精度加法

    void plus(int a[], int b[]) {
    	int i;
    	if (a[0] < b[0]) {
    		a[0] = b[0];
    	}
    	for (i = 1; i <= a[0]; i++) {
    		a[i] += b[i];
    		if (a[i] >= 10) {
    			a[i + 1]++;
    			a[i] -= 10;
    		}
    	}
    	if (a[a[0] + 1] != 0) {
    		a[0]++;
    	}
    }
    

    4.高精度减法

    int minus(int a[], int b[]) {
    	int i;
    	if (cmp(a, b) == 0) {
    		memset(a, 0, sizeof(a));
    		a[0] = 1;
    		return 0;
    	}
    	else if (cmp(a, b) > 0) {
    		for (i = 1; i <= a[0]; i++) {
    			a[i] = a[i] - b[i];
    			if (a[i] < 0) {
    				a[i + 1] -= 1;
    				a[i] += 10;
    			}
    		}
    		while (a[a[0]] == 0) {
    			a[0]--;
    		}
    		return 1;
    	}
    	else {
    		minus(b, a);
    		for (i = 0; i <= b[0]; i++) {
    			a[i] = b[i];
    		}
    		return -1;
    	}
    }/*返回值表示减法结果的符号*/
    

    参考资料:
    1.从零开始学算法:高精度计算
    2.高精度算法

  • 相关阅读:
    制药企业核算报表系统整体方案
    制药企业核算报表系统整体方案
    Linux_DHCP&DHCP Relay
    Linux_DHCP&DHCP Relay
    perl 数组元素为空和数组元素为undef 是两码事
    Powershell指令集_1
    Powershell指令集_1
    perl next 循环
    私企也有点儿干不下去,再次离职——北漂18年(35)
    利用微信机器人,自动发送验证码
  • 原文地址:https://www.cnblogs.com/dump16/p/12452832.html
Copyright © 2020-2023  润新知