这个是我在做密码学作业时写的帮助算多项式幂的函数,贴在这里供大家参考
在写代码过程中发现字符数组转字符串用.toString()方法会乱码,可以用String.ValueOf( argsp[] ),或者用Array.toString( args[] );
幂的运算时由于用的是String会出现空间浪费现象,可以用Stringbuffer类替换,但是由于计算量不大,所以就没有改了
package com.test;
public class MultPower {
public static char[] transfer(int a){ //十进制转二进制
String b=new String("");
while(a!=0){
b=String.valueOf(a%2)+b;
a=a/2;
}
return b.toCharArray();
}
public static char[] mult(char[] a,char[] b){ //多项式乘法
char[] pro=new char[a.length+b.length-1];
for(int i=0;i<a.length+b.length-1;i++)pro[i]='0';
int n=b.length;
for(int i=0;i<n;i++){
if(b[i]=='1'){
for(int j=0;j<a.length;j++){
if(pro[i+j]=='1'&&a[j]=='1')pro[i+j]='0';
else if(pro[i+j]=='1'||a[j]=='1')pro[i+j]='1';
}
}
else continue;
}
return pro;
}
public static String power(char[] a,int b){ //指数幂的运算
char[] pow=transfer(b);
System.out.println(pow);
int n=pow.length;
String res=String.valueOf(a);
for(int i=1;i<n;i++){
char[]tem=res.toCharArray();
res=String.valueOf(mult(tem,tem));
if(pow[i]=='1'){
res=String.valueOf(mult(res.toCharArray(),tem));
}
}
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String a="100";
char[] test=a.toCharArray();
System.out.println(test.length);
System.out.println(mult(test,test));
System.out.println(power(test,6));
}
}