的大数。

以下为c语言代码实现:

#include <stdio.h> #include <string.h>

#define MAXLEN 1000 //定义最大长度

typedef struct { char num[MAXLEN]; int len; } BigNum;

void init(BigNum *a) { //初始化 memset(a->num, 0, sizeof(a->num)); a->len = 0; }

void toBinary(char *s, BigNum *a) { //将大整数转换为二进制字符数组 int i, j = 0; char temp[MAXLEN]; init(a); scanf("%s", temp); a->len = strlen(temp); for(i = a->len - 1; i >= 0; i--) { int k = temp[i] - '0'; while(k > 0) { s[j++] = (k % 2) + '0'; k /= 2; } if(j < MAXLEN) s[j++] = '0'; } while(j < MAXLEN) s[j++] = '0'; for(i = 0; i < MAXLEN; i++) { a->num[i] = s[MAXLEN - i - 1]; } }

void print(BigNum a) { //输出二进制字符数组 int i; for(i = MAXLEN - a.len; i < MAXLEN; i++) { printf("%c", a.num[i]); } printf("\n"); }

void add(BigNum a, BigNum b, BigNum *c) { //相加 int i, t = 0; for(i = MAXLEN - 1; i >= 0; i--) { int x = a.num[i] - '0', y = b.num[i] - '0'; c->num[i] = (x + y + t) % 2 + '0'; t = (x + y + t) / 2; } c->len = MAXLEN; while(c->len > 1 && c->num[MAXLEN - c->len] == '0') c->len--; }

void sub(BigNum a, BigNum b, BigNum *c) { //相减 int i, t = 0; for(i = MAXLEN - 1; i >= 0; i--) { int x = a.num[i] - '0', y = b.num[i] - '0'; if(x - t >= y) { c->num[i] = x - y - t + '0'; t = 0; } else { c->num[i] = x + 2 - y - t + '0'; t = 1; } } c->len = MAXLEN; while(c->len > 1 && c->num[MAXLEN - c->len] == '0') c->len--; }

void mul(BigNum a, BigNum b, BigNum *c) { //相乘 int i, j, t = 0; BigNum temp; init(&temp); for(i = MAXLEN - 1; i >= MAXLEN - a.len; i--) { init(&temp); for(j = MAXLEN - 1; j >= MAXLEN - b.len; j--) { int x = a.num[i] - '0', y = b.num[j] - '0'; temp.num[i + j - MAXLEN + 1] = (x * y + t) % 2 + '0'; t = (x * y + t) / 2; } temp.num[i + j - MAXLEN + 1] = t + '0'; t = 0; temp.len = MAXLEN; while(temp.len > 1 && temp.num[MAXLEN - temp.len] == '0') temp.len--; add(*c, temp, c); } }

int main() { char s[MAXLEN]; BigNum a, b, c; init(&a); init(&b); init(&c); printf("请输入第一个大整数:"); toBinary(s, &a); printf("请输入第二个大整数:"); toBinary(s, &b); printf("二进制字符数组表示:\n"); printf("a = "); print(a); printf("b = "); print(b); printf("相加:\n"); add(a, b, &c); printf("a + b = "); print(c); printf("相减:\n"); sub(a, b, &c); printf("a - b = "); print(c); printf("相乘:\n"); mul(a, b, &c); printf("a * b = "); print(c); return 0;


原文地址: https://www.cveoy.top/t/topic/dHVt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录