c语言实验大整数,C语言编写大整数.doc

这篇博客介绍了如何使用C语言实现大整数的存储结构和基本运算,包括加法、减法、乘法和除法。大整数以256进制表示,每个字节的每一位都有意义,从而节省存储空间。博客提供了大整数结构的定义,以及初始化、比较、移位和各种算术运算的函数声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言编写大整数

本人写的大整数是256进制的,每一个字节里面的每一位都是有用的,因此比较节省空间。前面我用宏定义定义了大整数最大为128字节,也就是1024位,当然你可以改变SIZE的大小来改变大整数的位数。

大整数结构如下:

typedef struct BigNum //大整数结构

{

UCHAR data[SIZE]; //空间为(SIZE * sizeof(UCHAR)),就是SIZE个字节

}BigNum;

以下是头文件BigNum.h

//

#ifndef _BIGNUM_H_

#define _BIGNUM_H_

#define SIZE128 //一个大整数用个字节保存,最多表示位大整数

#define SIZE_102 * SIZE

typedef unsigned charUCHAR;

typedef unsigned shortUSHORT;

UCHAR atox(char ch); //将一个十六进制的字符(4位)转位数字,转换失败返回xff

typedef struct BigNum //大整数结构

{

UCHAR data[SIZE]; //空间为(SIZE * sizeof(UCHAR)),就是SIZE个字节

}BigNum;

BigNum Init(char* str); //初始化大整数,str为十六进制字符串

int GetByte(BigNum bignum); //判断有多少个字节不为

BigNum MovByteLetf(BigNum bignum, int n); //左移n个字节

BigNum MovByteRight(BigNum bignum, int n); //右移n个字节

int Cmp(BigNum bignum_a, BigNum bignum_b); //大整数比较大小,>返回,

BigNum Add(BigNum bignum_a, BigNum bignum_b); //大整数加法

BigNum Sub(BigNum bignum_a, BigNum bignum_b); //大整数减法

//BigNum Mul(BigNum bignum_a, UCHAR uchar); //大整数乘法UCHAR

BigNum Mul(BigNum bignum_a, BigNum bignum_b); //大整数乘法

BigNum Div(BigNum bignum_a, BigNum bignum_b); //大整数除法

BigNum Mod(BigNum bignum_a, BigNum bignum_b); //大整数模运算

BigNum Pow(BigNum bignum, int n); //大整数乘方运算

void Print_16(BigNum bignum); //打印十六进制大整数

void Print_10(BigNum bignum); //打印十进制大整数

#endif

//

以下是C文件BigNum.c

//

// BigNum.c : 定义控制台应用程序的入口点。

//

#include

#include

#include "BigNum.h"

UCHAR atox(char ch) //将一个十六进制的字符(4位)转位数字,转换失败返回xff

{

UCHAR res;

if (ch >= '0' && ch <= '9')

{

res = ch - '0';

}

else if (ch >= 'a' && ch <= 'f')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值