注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那一日,泪水打湿雪花冰冷的心

曾经的滋味,回忆在一次次的离合中,回眸时,那一刻,如涟漪般在一刹那融化

 
 
 

日志

 
 

UVA 10023  

2010-05-03 22:31:43|  分类: uva |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这是个名副其实的求平方根的题,以前讨论过几个先进的求平方根的算法,发现点击率颇大呢O(∩_∩)O~
不过之前只限于低精度的求平方根,高精度的求平方根就需要类似手算求平方根的方法
借鉴别人的想法:
Take the square root of 148996.

Preparation:
- make groups of two digits, starting from the right: 14-89-96. (if the number of digits was odd, the leftmost group would have only one digit);
- initialise the variables remain, odd and answer with 0.

Loop for every group of two digits, from left to right:
   - odd  = 20 * answer +1;
   - remain = 100 * remain + group;
   - count = 0;
   - loop while remain >= odd:
      - count = count + 1;
      - remain = remain - odd;
      - odd = odd + 2;
   - answer = 10 * answer + count.

再利用java的BigInteger很方便的就完成了
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int t=in.nextInt();
BigInteger remain=BigInteger.ZERO;
BigInteger odd=BigInteger.ZERO;
BigInteger ans=BigInteger.ZERO;
for(int i=0;i<t;i++){
String s=in.next();
remain=BigInteger.ZERO;
odd=BigInteger.ZERO;
ans=BigInteger.ZERO;
int group=0,k=0;
if(s.length()%2==1){
group=s.charAt(0)-'0';
k=-1;
}
else{
group=(s.charAt(0)-'0')*10+s.charAt(1)-'0';
k=0;
}
for(int j=0;j<(s.length()+1)/2;j++){
if(j!=0)
group=(s.charAt(j*2+k)-'0')*10+s.charAt(j*2+k+1)-'0';
odd=BigInteger.valueOf(20).multiply(ans).add(BigInteger.ONE);
remain=BigInteger.valueOf(100).multiply(remain).add(BigInteger.valueOf(group));
int count=0;
while(remain.compareTo(odd)>=0){
count++;
remain=remain.subtract(odd);
odd=odd.add(BigInteger.valueOf(2));
}
ans=ans.multiply(BigInteger.TEN).add(BigInteger.valueOf(count));
}
System.out.println(ans);
if(i!=t-1)
System.out.println();
}
}

}

  评论这张
 
阅读(796)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018