【转】看起来很神奇的高精度开方

Not quite understand,but amazing。。。。


 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4  using  namespace std;
 5  
 6  int l;
 7  
 8  int work( int o, char *O, int I)
 9 {
10      char c,*D = O;
11      if (o >  0)
12     {
13          for(l =  0; D[l]; D[l++] -=  10)
14         {
15             D[l++] -=  120;
16             D[l] -=  110;
17              while (!work( 0,O,l))
18                 D[l] +=  20;
19             putchar((D[l]+ 1032)/ 20) ;
20         }
21         putchar( 10);
22     }
23      else
24     {
25         c = o+(D[I]+ 82)% 10-(I>l/ 2)*(D[I-l+I]+ 72)/ 10- 9;
26         D[I] += (I <  0)? 0:!(o = work(c/ 10,O,I- 1))*((c+ 999)% 10-(D[I]+ 92)% 10);
27     }
28      return o;
29 }
30  
31  int main()
32 {
33      char s[ 1200];
34     s[ 0] =  ' 0 ';
35     scanf( " %s ",s+ 1);
36      if(strlen(s)% 2 ==  1) work( 2,s+ 1, 0);
37      else    work( 2,s, 0);
38      return  0;
39 }


转载于:https://www.cnblogs.com/pony1993/archive/2012/08/10/2631176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值