写一个基于NTL大数库实现大整数模加减乘除运算的c语言程序
时间: 2023-11-28 11:48:01 浏览: 186
以下是一个基于NTL大数库实现的大整数模加减乘除运算的C语言程序,供您参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <NTL/ZZ.h>
using namespace std;
using namespace NTL;
void print(ZZ x)
{
char *str = new char[1024];
BytesFromZZ((unsigned char*)str, x, 1024);
printf("%s\n", str);
delete[] str;
}
int main()
{
ZZ a, b, c, d, e;
char *str_a = new char[1024];
char *str_b = new char[1024];
char *str_c = new char[1024];
char *str_d = new char[1024];
char *str_e = new char[1024];
const char *str_mod = "100000000000000000000000"; // 模数为10^23
printf("请输入两个大整数:\n");
scanf("%s %s", str_a, str_b);
// 转换为大整数
ZZFromBytes(a, (unsigned char*)str_a, strlen(str_a));
ZZFromBytes(b, (unsigned char*)str_b, strlen(str_b));
// 模加
c = (a + b) % conv<ZZ>(str_mod);
printf("模加结果:");
print(c);
// 模减
d = (a - b) % conv<ZZ>(str_mod);
printf("模减结果:");
print(d);
// 模乘
e = (a * b) % conv<ZZ>(str_mod);
printf("模乘结果:");
print(e);
// 模除
if (b == 0) {
printf("除数不能为0!\n");
} else {
c = a / b;
printf("模除结果:");
print(c);
}
delete[] str_a;
delete[] str_b;
delete[] str_c;
delete[] str_d;
delete[] str_e;
return 0;
}
```
该程序首先使用NTL库中的ZZ类型表示大整数,使用BytesFromZZ和ZZFromBytes函数将字符串转换为大整数。然后使用+、-、*、/等运算符对大整数进行模加、模减、模乘、模除运算,其中模数为10^23。最后使用print函数将结果输出到控制台。
阅读全文