高精密测算选用仿真模拟列坚式法。
一般测算用正数,针对负值,解决标记位。
1.高精密数的储存
基础观念
用数组储放和表达高精密整数金额。一个数组原素,储放高精密整数金额中的一位。
以便有利于测算,将数由底位到上位先后存有数组下标相匹配由低到高的部位上,在其中,数组的第0个下标相匹配部位储存该数的十位数。
#include#include#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 = 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; } }/*返回值表达减法結果的标记*/
参考文献:从零开始学优化算法:高精密测算->强推
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4