java二分法求次方代码 java实现二分法

给定a和n,用二分法设计出求a^n的方法 用java语言

easy。

成都创新互联主要从事成都网站建设、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务庆城,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

//假定 n=0

long func(int n,int a){

if(n==0){

return 1 ;

}else{

if(n%2 == 0){

return func(n/2)*func(n/2);

}else{

return func((n-1)/2)*func((n-1)/2)*a

}

}

}

怎么用java代码实现开平方算法?

这是我应聘时写的算法代码,运行成功:

//这是用java编写的一个求2的平方根的程序,精确度可通过修改weishu参数来改变

public class app

{ //用二分法求2的平方根

public static void main(String args[])

{

int a[],b[],s[],d[],c[],ss[];

int i,j,k;

a=new int[1000];

b=new int[1000];

s=new int[1000];

d=new int[1000];

c=new int[1000];

ss=new int[1000];

boolean jingque;

jingque=true;

a[0]=b[0]=2;

a[2]=b[2]=1;

a[1]=4;

b[1]=5;

int weishu=200;//定义循环次数

for(i=0;i1000;i++)

s[i]=0;

for(k=0;kweishu;k++)

{

hanshucheng.cheng(b,b,s);

j=s[0];

while (s[j]=2)

{

hanshuadd.add(a,b,c);

hanshuchu.chu(d,c);

hanshucopy.copy(ss,b);

hanshucopy.copy(b,d);

hanshucheng.cheng(b,b,s);

j=s[0];

// for(i=0;i=s[0];i++)

//System.out.println("s["+i+"]="+s[i]);

}

hanshucopy.copy(a,b);

hanshucopy.copy(b,ss);

}

for(i=a[0];i=1;i--)

System.out.print(a[i]);

System.out.print("左边计算到"+a[0]+"位\n");

for(i=b[0];i=1;i--)

System.out.print(b[i]);

System.out.print("右边计算到"+b[0]+"位\n");

for(i=a[0],j=b[0];jingque==true;i--,j--)

if(a[i]==b[j])

System.out.print(a[i]);

else

jingque=false;

System.out.print("精确到"+(a[0]-i-1)+"位\n");

}

}

class hanshucheng

{

public static void cheng( int a[],int b[],int s[])//定义两数相乘的函数

{

int flag=0,flag1=0;

int number=b[0];

int c[]=new int[1000];

int i,j,k,u;

for(int i1=0;i11000;i1++)

s[i1]=0;

for(i=1;i=number;i++)

{

for(int i1=0;i11000;i1++)

c[i1]=0;

for(j=i,k=1;jnumber+i;j++,k++)

{

c[j]=(a[k]*b[i]+flag)%10;

flag=(a[k]*b[i]+flag)/10;

}

if (flag!=0)

{

c[j]=flag;

flag=0;

j=j+1;

}

c[0]=j-1;

//for(k=1;k=c[0];k++)

//System.out.println("c="+c[k]);

for(k=1;k=c[0];k++)

{ u=s[k];

s[k]=(u+c[k]+flag1)%10;

flag1=(u+c[k]+flag1)/10;

}

if(flag1!=0)

{

s[k]=flag1;

k=k+1;

flag1=0;

}

s[0]=k-1;

// for(k=0;k=s[0];k++)

//System.out.println(s[k]);

}

}

}

class hanshuadd

{

public static void add(int a[],int b[],int c[])//定义两数相加的函数

{

int flag=0;int i,j,k;

int a1[]=new int[1000];

for(i=1;i=b[0];i++)

a1[i]=0;

for(j=b[0]-a[0]+1,k=1;j=b[0];j++,k++)

a1[j]=a[k];

//for(k=0;k=j;k++)

//System.out.println("a1="+a1[k]);

for(i=1;i=b[0];i++)

{

c[i]=(a1[i]+b[i]+flag)%10;

flag=(a1[i]+b[i]+flag)/10;

}

if(flag!=0)

{

c[i]=flag;

i=i+1;

flag=0;

}

c[0]=i-1;

}

}

class hanshuchu

{

public static void chu(int d[],int a[])//定义任一数除以2的函数

{

int flag=0,i;

for(i=a[0];i=1;i--)

{

d[i+1]=(flag*10+a[i])/2;

flag=(flag*10+a[i])%2;

}

if(flag!=0)

d[1]=5;

if(d[1]==0)

for(i=1;i=a[0]+1;i++)

d[i]=d[i+1];

d[i]=0;

d[0]=a[0]+1;

}

}

class hanshucopy

{

public static void copy(int a[],int b[])//定义

{

int i;

for(i=0;i=b[0];i++)

a[i]=b[i];

while (i1000)

a[i++]=0;

}

}

如何使用Java计算次方

计算2的N次方

时间限制: 1000ms内存限制: 65536kB

描述

任意给定一个正整数N(N=100),计算2的N次方的值。

输入

输入只有一个正整数N。

输出

输出2的N次方的值。

样例输入

5

样例输出

32

参考代码

[java] view plain copy print?

import java.util.*;

public class Main {

public final static int SIZE = 30;

public static void main(String[] args) throws Exception {

Scanner cin = new Scanner(System.in);

int n = cin.nextInt();

int res[] = new int[SIZE + 1];

int i;

for(i = 0;i SIZE;++ i){

res[i] = 0;

}

res[0] = 1;

while(n 0){

for(i = 0;i SIZE;++ i){

res[i] *= 2;

}

for(i = 0;i SIZE;++ i){

if(res[i] 9){

res[i + 1] += res[i] / 10;

res[i] %= 10;

}

}

n --;

}

boolean bl = false;

StringBuffer bf = new StringBuffer();

for(i = SIZE;i = 0;-- i){

if(res[i] != 0 || bl){

bf.append(res[i]);

bl = true;

}

}

System.out.println(bf);

}

}

根据高位低位改进的代码:

[java] view plain copy print?

/*

* Title :power 2

* From :

* Time :2011-10-11 21:10PM

* Author :Eric Zhou,binfeihan

* Email :binfeihan@126.com

*/

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException{

BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));

int n = Integer.parseInt(cin.readLine().trim());

System.out.println(my_power_2(n));

//System.out.println(Long.MAX_VALUE);

//System.out.println(Long.MIN_VALUE);

}

public static StringBuffer my_power_2(int N){

StringBuffer v = new StringBuffer("");

long num[] = new long[2];

num[1] = 1;

if(N 62){

num[0] = 1;

num[0] = num[0](N - 62);

num[1] = num[1]62;

String s = String.valueOf(num[1]);

int size = 30,i = 0,j = 0;

long n[] = new long[size + 1];

//System.out.println(num[0]+" "+s);

for(i = s.length() - 1;i = 0;-- i){

n[j ++] = (long) (num[0] * (s.charAt(i) - '0'));

//System.out.println(n[j - 1]);

}

for(i = 0;i size;++ i){

while(n[i] 9){

n[i + 1] += n[i] / 10;

n[i] %= 10;

}

}

boolean bl = false;

for(i = size;i = 0;-- i){

if(n[i] != 0 || bl){

v.append(n[i]);

bl = true;

}

}

}else{

num[1] = num[1] N;

v.append(String.valueOf(num[1]));

}

return v;

}

}


分享名称:java二分法求次方代码 java实现二分法
转载来于:http://scyanting.com/article/ddocjio.html