一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 325|回复: 1
收起左侧

[算法题] string 版本pow(x,y)

[复制链接] |试试Instant~ |关注本帖
allen6432 发表于 2015-9-5 03:40:46 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
pow(int x, int y)
1<=x<=9
1<=y<=99 想了半天发现数太大了 int 或者 long 都装不下,只能返回 string

大家有什么好建议处理string
 楼主| allen6432 发表于 2015-9-5 04:15:55 | 显示全部楼层
自己写了一下

public class Solution{
    public String pow(int x,int y){
            //1<=x<=9 1<=y<=99
        if(x==0)    return "1";
        return helper(String.valueOf(x),String.valueOf(y));
    }
    public String helper(String x, String y){
        //int m=Integer.parseInt(x);
        int n=Integer.parseInt(y);
        if(n==0)    return "1";
        if(n==1)    return x;
        String half=helper(x,String.valueOf(n/2));
        if(n%2==0)
            return multiply(half,half);
        else
            return multiply(x,multiply(half,half));
    }
    public String multiply(String x, String y){
        int m=x.length();
        int n=y.length();
        int[] res=new int[n+m];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                res[m+n-1-i-j]+=(x.charAt(m-1-i)-'0')*(y.charAt(n-1-j)-'0');
            }
        }
        int carry=0;
        for(int i=n+m-1;i>-1;i--){
            int val=res[i]+carry;
            res[i]=val%10;
            carry=val/10;
        }
        StringBuilder sb=new StringBuilder();
        boolean flg=false;
        for(int i=0;i<n+m;i++){
            if(!flg&&res[i]!=0)
                flg=true;
            if(flg)
                sb.append(res[i]);
        }
        if(!flg)
            return "0";
        else
            return sb.toString();
    }
}
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-6 18:48

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表