⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1027-1.cpp

📁 五十位小数的开方 使用者输入一个整数即可出现答案
💻 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 + -