112

 

 计算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进行对比

 可以发现是成功的~~

 

 

 

 

 

 

posted @ 2021-05-27 09:23  20181217Cindy  阅读(141)  评论(0编辑  收藏  举报