计算2^1217
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/bn.h> int main() { BN_CTX *r; BIGNUM *a; BIGNUM *b; BIGNUM *c; char *x; char s[]="2"; char t[]="1217"; r = BN_CTX_new(); a = BN_new(); b = BN_new(); c = BN_new(); BN_dec2bn(&a, s); BN_dec2bn(&b, t); BN_exp(c,a,b,r);//计算2^1217次方 x = BN_bn2dec(c);//把计算结果(大数)转化成10进制数 puts(x);//打印出x BN_free(a); BN_free(b); BN_free(c); BN_CTX_free(r); free(x); return 0; }
编译及运行结果:

在华为云运行一下:

与bc进行对比

学号乘积
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
int main()
{
BN_CTX *r[11];
BIGNUM *bn[12];
int i;
const char s[11][9]={"20181212","20181213","20181214","20181215","20181216","20181217","20181218","20181219","20181220","20181221","20181222"};
char* out;
char t[2]="1";
for(i=0;i<11;i++){
bn[i]=BN_new();
BN_dec2bn(&bn[i],s[i]);
r[i] = BN_CTX_new();
}
bn[11]=BN_new();
BN_dec2bn(&bn[11],t);
for(i=0;i<11;i++){
BN_mul(bn[11],bn[11],bn[i],r[i]); //计算11个同学学号的乘积
}
out= BN_bn2hex(bn[11]); //将大数转化转化成16进制的字符串
puts(out);//打印出字符串
for(i=0;i<11;i++){
BN_free(bn[i]);
BN_CTX_free(r[i]);
}
BN_free(bn[i]);
free(out);
return 0;
}
编译及运行结果:

在华为云运行一下:

与bc进行对比
可以发现是成功的~~