/*
codevs 3119 高精度练习之大整数开根 (各种高精+压位)
二分答案 然后高精判重 打了一个多小时.....
最后还超时了...压位就好了
测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#3.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#4.in 结果:AC 内存使用量: 256kB 时间使用量: 10ms
测试点#5.in 结果:AC 内存使用量: 256kB 时间使用量: 56ms
*/
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxn 1010
#define ll long long
#define bas 100000000
#define mem(a,b) for(ll i=0;i<=len;i++)a[i]=b[i];
#define mes(a) for(ll i=0;i<=len;i++)a[i]=0;
using namespace std;
ll len,a[maxn],l[maxn],r[maxn],mid[maxn],ans[maxn],x[maxn];
char s[maxn];
ll max(ll x,ll y){
return x>y?x:y;
}
void plu(ll a[maxn],ll b[maxn]){
ll c[maxn];mes(c);
c[]=max(a[],b[]);
for(int i=;i<=c[];i++){
c[i]+=a[i]+b[i];
if(c[i]>=bas){
c[i+]++;c[i]%=bas;
}
}
if(c[c[]+])c[]++;
mem(mid,c);
}
void Plu(ll a[maxn],ll b){
ll p=,c[maxn];mes(c);
mem(c,a);c[p]++;
while(c[p]>=bas){
c[p]%=bas;c[p+]++;p++;
}
if(c[c[]+])c[]++;
mem(l,c);
}
void miu(ll a[maxn],ll b){
ll p=,c[maxn];mes(c);
mem(c,a);c[p]--;
while(c[p]<){
c[p]+=bas;c[p+]--;p++;
}
if(c[c[]]==)c[]--;
mem(r,c);
}
void mul(ll a[maxn],ll b[maxn],ll c[maxn]){
for(int i=;i<=a[];i++){
for(int j=;j<=b[];j++){
c[i+j-]+=a[i]*b[j];
if(c[i+j-]>=bas){
c[i+j]+=c[i+j-]/bas;
c[i+j-]%=bas;
}
}
ll len=i+b[];
while(c[len]>=bas){
c[len+]+=c[len]/bas;
c[len]%=bas;len++;
}
}
for(int i=a[]+b[];i>=;i--)
if(c[i]){
c[]=i;break;
}
}
void div(ll a[maxn],ll b){
ll c[maxn];mes(c);
for(int i=a[];i>=;i--){
c[i]=a[i+]%b*bas+a[i];
c[i]=c[i]/b;
}
for(int i=a[];i>=;i--)
if(c[i]){
c[]=i;break;
}
mem(a,c);
}
bool cmp(ll a[maxn],ll b[maxn]){
if(a[]>b[])return ;
if(a[]<b[])return ;
for(ll i=a[];i>=;i--){
if(a[i]>b[i])return ;
if(a[i]<b[i])return ;
}
return ;
}
bool Judge(){
memset(x,,sizeof(x));
mul(mid,mid,x);
return cmp(x,a);
}
int main()
{
scanf("%s",s);
a[]=strlen(s);len=a[];
for(int i=;i<=a[];i++)
a[i]=s[a[]-i]-'';
for(int i=;i<=len;i+=)
x[++x[]]=a[i+]*+a[i+]*+a[i+]*+
a[i+]*+a[i+]*+a[i+]*+a[i+]*+a[i];
mem(a,x);
mem(r,a);r[]=a[]/+;
while(cmp(l,r)){
plu(l,r);
div(mid,);
if(Judge()){
mem(ans,mid);
Plu(mid,);
}
else miu(mid,);
}
printf("%lld",ans[ans[]]);
for(ll i=ans[]-;i>=;i--)
printf("%08lld",ans[i]);
return ;
}

codevs 3119 高精度练习之大整数开根 (各种高精+压位)的更多相关文章

  1. [code3119]高精度练习之大整数开根

    试题描述  给出一个正整数n,求n开根号后的整数部分的值.n的位数不超过1000位. 输入 读入一个不超过1000位的正整数n. 输出 输出所求答案 输入示例 17   输出示例 4 高精度开根:需要 ...

  2. codevs 3123 高精度练习之超大整数乘法

    fft. #include<iostream> #include<cstdio> #include<cstring> #include<complex> ...

  3. 大整数类BIGN的设计与实现 C++高精度模板

    首先感谢刘汝佳所著的<算法竞赛入门经典>. 众所周知,C++中储存能力最大的unsigned long long 也是有着一个上限,如果我们想计算非常大的整数时,就不知所措了,所以,我写了 ...

  4. Ural 1158. Censored! 有限状态自动机+DP+大整数

    Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用 ...

  5. COJ 1211 大整数开平方

    手写求大整数开根号所得到的值,具体计算过程参考别人的资料,最后利用java的大整数得到答案 别人博客链接:http://www.cnblogs.com/Rinyo/archive/2012/12/16 ...

  6. 原生js数值开根算法

    不借助Math函数求开根值 1.二分迭代法求n开根后的值 思路: left=0 right=n mid=(left+right)/2 比较mid^2与n大小 =输出: >改变范围,right=m ...

  7. POJ 1001 解题报告 高精度大整数乘法模版

    题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...

  8. BZOJ 高精度开根 JAVA代码

    晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得到一个无理数,所以这项工 ...

  9. Java高精度基础+开根

    在焦作站的acm网络赛中遇到了一个高精度开根的水题--但是那时候WA了 后面学写java补题还T了orz 所以写一篇文章来记录一下java的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...

随机推荐

  1. nutch-1.7 编译

    转载自:http://peigang.iteye.com/blog/1563288 从nutch-.3开始 本地抓取(单击) 和 分布式抓取(集群)所使用的配置文件和命令单独分开. 资源:下载地址:h ...

  2. 关于用xercesImpl包解析xml文件遇中文报错问题

    今天在运行项目时报错: Caused by: org.apache.xerces.impl.io.MalformedByteSequenceException: 3 字节 UTF-8 序列的字节 3 ...

  3. 14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小

    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小 改变 InnoDB ...

  4. WordPress wp-includes/functions.php脚本远程任意代码执行漏洞

    漏洞名称: WordPress wp-includes/functions.php脚本远程任意代码执行漏洞 CNNVD编号: CNNVD-201309-166 发布时间: 2013-09-13 更新时 ...

  5. Linux Shell编程(29)——函数

    和"真正的"编程语言一样, Bash也有函数,虽然在某些实现方面稍有些限制. 一个函数是一个子程序,用于实现一串操作的代码块,它是完成特定任务的"黑盒子". 当 ...

  6. Linux Shell编程(21)——复杂命令

    更高级的用户命令find-exec COMMAND \;在每一个find 匹配到的文件执行 COMMAND 命令. 命令序列以 ; 结束( ";" 是 转义符 以保证 shell ...

  7. php-Mysql示例1

  8. unity3d AI's sight

    just finished -----by wolf96

  9. 封装获取网络信息Linux—API类

    封装获取网络信息Linux—API类 封装好的库: #ifndef NETINFORMATION_H #define NETINFORMATION_H #include <netdb.h> ...

  10. 从物理执行的角度透视spark Job

    本博文主要内容: 1.再次思考pipeline 2.窄依赖物理执行内幕 3.宽依赖物理执行内幕 4.Job提交流程 一:再次思考pipeline 即使采用pipeline的方式,函数f对依赖的RDD中 ...