问题标题: 酷町堂:大佬帮个忙

0
0
已解决
吴君昊
吴君昊
新手光能
新手光能

我需要用程序算出5的5000次方*5的5000次方

但我还没学高精度,普通运算只能输出一个inf

要求不高只要有正确的答案就行科学计数法,准确的数都行,或者一个正确的代码。

吴君昊在2020-07-23 08:43:00追加了内容

只要有精确的答案就行,不要有省略号,用科学计数法最好


0
已采纳
李泽远
李泽远
高级天翼
高级天翼

这至少得有几百位吧,我实现不了QAQ,用什么方法输出都是inf(意思是无穷大)

不过:

34.544674220624998×10^176

李泽远在2020-07-23 09:42:41追加了内容

那是错的

李泽远在2020-07-23 09:47:05追加了内容

5.5271478753^4等于多少?

算出来似乎等于933.26361852993466,

也就是933.26361852993466*10^696

李泽远在2020-07-23 11:53:53追加了内容

933.26361852993466*10^696,就问你6不6?

我使用了一套漂亮的算法,拆开再拆开再拆开再拆开再拆开再拆开……最后再一乘,完美~

纯(jì)  手(suàn)  算(qì) 

0
吴君昊
吴君昊
新手光能
新手光能

急!2020/7/23     上午9:30分之前我就要

0
李素妍
李素妍
新手天翼
新手天翼

1000000000......(10后面加3495个零)

0
李素妍
李素妍
新手天翼
新手天翼

对不起,我遍不好,但你可以看看我编的高精加减法

加:

#include <iostream>
#include <string>
using namespace std;
string x,y;
int a[100000],b[100000],c[100000],la,lb,lc;
int main(){
    cin>>x>>y;
    la=x.size();
    lb=y.size();
    for(int i=0;i<la;i++){
        a[la-i]=x[i]-'0';
    }
    for(int i=0;i<lb;i++){
        b[lb-i]=y[i]-'0';
    }
    lc=max(la,lb);
    for(int i=1;i<=lc;i++){
        c[i]+=a[i]+b[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
    }
    if(c[lc+1]>0) lc++;
    for(int i=lc;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

减:

#include <iostream>
#include <string>
using namespace std;
string x,y;
int a[1000010],b[1000010],c[10010],la,lb;
int main(){
    cin>>x>>y;
    la=x.size();
    lb=y.size();
    if(la<lb||la==lb&&x<y){
        swap(x,y);
        swap(la,lb);
        cout<<'-';    
    }
    for(int i=0;i<la;i++){
        a[la-i]=x[i]-'0';
    }
    for(int i=0;i<lb;i++){
        b[lb-i]=y[i]-'0';
    }
    for(int i=1;i<=la;i++){
        if(a[i]<b[i]){
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
    }
    while(c[la]==0&&la>1)la--;
    for(int i=la;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

可以看看

0
曹砚青
曹砚青
中级光能
中级光能

看好了

 

 

  1. 高精度加法分为四步:初始化、输入、操作、输出

  2. 2

    首先是初始化

     char a1[100],b1[100];     

    int a[100],b[100],c[100],lena,lenb,lenc,i,x;    

     memset(a,0,sizeof(a));     

    memset(b,0,sizeof(b));     

    memset(c,0,sizeof(c));                                                     l

  3. 3

    然后是输入

    高精度加法采用字符串的方式输入

    gets(a1);  

    gets(b1);      

    ena=strlen(a1);   

     lenb=strlen(b1);   

     for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;

    for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;

    lenc =1;  

    x=0

  4. 4

    接下来是操作

    高精度加法采用按位运算,从最后一位开始运算,如果当前位大于9,就进位

     while (lenc <=lena||lenc <=lenb) 

     {               

    c[lenc]=a[lenc]+b[lenc]+x;

    x=c[lenc]/10;

    c[lenc]%=10;

    lenc++; 

     }

     c[lenc]=x;

     if (c[lenc]==0)   lenc--;                                    

  5. 5

    最后就是输出了,这没有什么难的不过记住要从后往前输

     for (i=lenc;i>=1;i--)    cout<<c[i]; 

    cout<<endl;   

  6. 6

    最后总结一下,给一个源代码

     

    高精度算法(c++)

    END

高精度减法

  1. 1

    高精度减法也分为四步:初始化、输入、操作、输出

    高精度减法类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位。

  2. 2

    首先初始化

     int a[256],b[256],c[256],lena,lenb,lenc,i;   

    char n[256],n1[256],n2[256];   

    memset(a,0,sizeof(a));   

    memset(b,0,sizeof(b));   

    memset(c,0,sizeof(c));   

  3. 3

    输入  

    gets(n1);   

    gets(n2);

    if (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) //strcmp()为字符串比较函数,当n1==n2, 返回0,n1>n2时,返回正整数;n1<n2时,返回负整数

     {

    strcpy(n,n1);

    strcpy(n1,n2); 

    strcpy(n2,n);

     cout<<"-"; //交换了减数和被减数,结果为负数 

     }

     lena=strlen(n1); lenb=strlen(n2);      

     for (i=0;i<=lena-1;i++) a[lena-i]=int(n1[i]-'0');  //被减数放入a数组      

     for (i=0;i<=lenb-1;i++) b[lenb-i]=int(n2[i]-'0');  //减数放入b数组         

  4. 4

    操作

      i=1;   

    while (i<=lena||i<=lenb)   

    {   

    if (a[i]<b[i])   

    {  

     a[i]+=10;               //不够减,那么向高位借1当10   

    a[i+1]--;  

     }   

    c[i]=a[i]-b[i];                        //对应位相减  

     i++;  

     }  

     lenc=i;   

    while ((c[lenc]==0)&&(lenc>1)) lenc--;   //最高位的0不输出       

    for (i=lenc;i>=1;i--) cout<<c[i];               //输出结果   

    cout<<endl;  

     return 0;  

    }   

0
0
曹砚青
曹砚青
中级光能
中级光能

不行,就算你用

unsigned long long

也是inf,

只能用高精度

0
李瑞曦
李瑞曦
高级天翼
高级天翼

这一题好像只能用高精度啊,只是····我不会啊!

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!

0
王文博
王文博
缔造者之神
缔造者之神

这是5的10000次方,也就是你所要的5^5000^2.

代码:无

提示:a[],for,用位数来算

王文博在2020-07-23 09:57:00追加了内容

图片看不清,是不是?那就再来(位数实在太多了)OK

0
0
侯平仄
侯平仄
新手天翼
新手天翼

7.0798112610481728923856151586941e+3494

0
我要回答