现在的位置: 首页 > 综合 > 正文

《C语言接口与实现》实验——任意精度算术(AP_T)

2013年10月04日 ⁄ 综合 ⁄ 共 1339字 ⁄ 字号 评论关闭

实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,源码可以下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!

再次强烈建议在这些接口函数上设上断点,按F11跟进去把源码走一遍!才会获得大师们真正的深刻思想


看到(AP_T)这个接口,想起来openssl中的【大数库】(示例到下载:http://blog.csdn.net/dijkstar/article/details/4973506),

(AP_T)里面调用了XPT源程序如下:

#include <stdio.h>
#include <string.h>
#include "include/Ap.h"
#include "include/Fmt.h"

#pragma comment(lib, "libcii.lib")


//打印输出
void Print(const char *tip, AP_T *pAT)
{
	char str[200] = {0};
	AP_tostr(str, 200, 10, *pAT);
	printf("%s = %s\n", tip, str);
}

void main()
{
	//注意:C语言一定要将这些变量声明放在函数的头部
	AP_T a1, a2, a3, a4;
	AP_T b1, b2;
	char *end;
	char str1[200] = {0};

	//
	//	将值初始化为100
	//
	a1 = AP_new(100);
	Print("a1", &a1);

	//
	//从字符串转换到AP
	//	AP_fromstr函数内部自动分配一个AP
	//
	a2 = AP_fromstr("90898768665673572732648721684236487", 10, &end);

	//
	//	打印输出
	//		AP_tostr不像 XP_tostr一样修改a2
	//		因此可以将输出打印单独做成一个函数供输出
	//
	AP_tostr(str1, 200, 10, a2);
	printf("a2 = %s\n", str1);


	//取反
	a1 = AP_neg(a2);
	Print("a1", &a1);

	//加法
	//	该函数内部会分配一个AP
	//	
	a1 = AP_fromstr("100000000000000000000000000000000000000000000000", 10, &end);
	Print("a1", &a1);
	a3 = AP_add(a1, a2);
	Print("加a3", &a3);

	//减法
	//	该函数内部会分配一个AP
	//
	a3 = AP_sub(a1, a2);
	Print("减a3", &a3);

	//乘法
	//	该函数内部会分配一个AP
	//
	a3 = AP_mul(a1, a2);
	Print("乘a3", &a3);

	//除法
	//	该函数内部会分配一个AP
	//
	b1 = AP_div(a1, a2);
	Print("除a3", &b1);
	
	//mod
	//	该函数内部会分配一个AP
	//
	b2 = AP_mod(a1, a2);
	Print("余a3", &b2);

	//
	//	验证
	//		a4的值应该和a1是一样的
	//
	a4 = AP_add(AP_mul(b1, a2), b2);
	Print("和a4", &a4);


	//
	//	转换函数,
	//
	Fmt_register('!', AP_fmt);
	Fmt_print("转换a4 = %!\n", a4);
	//
	//其他函数不再验证
	

}

抱歉!评论已关闭.