📄 1027-1.cpp
字号:
#include<stdio.h>
#include<string.h>
int b[10000]={},c[10000]={},d[10000]={},A[100000]={},B[100000]={},s[100]={},ll;
int bc(){
int i,l,r,k;
for(i=0;b[i]==0&&c[i]==0;i++);
for(;i<1000;i++){
d[i]+=(b[i]+c[i])/2;
if(d[i]!=0)l=i;
if((b[i]+c[i])%2){d[i+1]+=5;l=i+1;}
k=0;;
while(d[i-k]>=10){
d[i-k-1]+=d[i-k]/10;
d[i-k]%=10;
k++;
}}
return l;
}
void xd(int l){
int i,j,r;
for(i=0;d[i]==0;i++);
r=i;
for(;i<=l;i++){A[i-r]=d[l-(i-r)];}
for(i=0;i<=l;i++){
for(j=0;j<=l;j++){
B[i+j]+=A[i]*A[j];
B[i+j+1]+=B[i+j]/10;
B[i+j]%=10;
}}
i--;
if(B[i+i+1]!=0&&ll%2==1){B[i+i]+=B[i+i+1]*10;B[i+i+1]=0;}
r=0;
for(i=(l-r)+(l-r)+10;i>=0;i--){
if(B[i]==0&&r==0);
else{A[r]=B[i];r++;}}
}
int strc(int l){
int i;
for(i=0;i<l;i++){
if(A[i]>s[i]){if(i==0&&A[i]==9)return 1;
return -1;}
else if(A[i]<s[i]){return 1;}}
return -1;
}
int main(){
int o,i,aa,l,j;
char a[10];
while(scanf("%s",a)!=EOF){
aa=0;
ll=strlen(a);
for(i=0;a[i]!=0;i++){s[i]=a[i]-'0';
aa=aa*10;
aa+=a[i]-'0';}
o=0;
for(i=10;o<6;i*=10){o++;
if(i*i>aa)break;}
for(i=i/10;i<=i*10;i++){
if(i*i<=aa&&(i+1)*(i+1)>aa)break;}
for(j=o-1;j>=0;j--){b[j]=i%10;
c[j]=i%10;
i=i/10;}
b[o-1]++;
for(i=0;i<300;i++){
l=bc();
xd(l);
if(strc(ll)==1){
for(j=0;j<1000;j++){c[j]=d[j];d[j]=0;A[j]=0;B[j]=0;}}
else{for(j=0;j<1000;j++){b[j]=d[j];d[j]=0;A[j]=0;B[j]=0;}
}
}
bc();
for(i=0;i<o;i++){printf("%d",d[i]);d[i]=0;b[i]=0;c[i]=0;s[i]=0;}
printf(".");
j=49;
if(d[o+50]>=5){d[o+j]++;
while(d[o+j]>=10){d[o+j-1]+=d[o+j]/10;d[o+j]%=10;j--;}}
for(;i<o+50;i++){printf("%d",d[i]);d[i]=0;b[i]=0;c[i]=0;s[i]=0;}
for(;i<10000;i++){d[i]=0;b[i]=0;c[i]=0;}
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -