大数问题

来源:互联网 发布:建筑业网络快报 编辑:程序博客网 时间:2024/06/07 19:40

一般来说加法没什么大问题,但是有一类加法,大数加法,即超过 long long 范围一般方法无法操作时,我们可以想到,是否可以用数组操作,每一位存一个;那么计算就能够进行了但有一点,就是加法的位数对齐问题我们常常想到的就是倒过来加,因为存的时候高位在前,所以应该倒这加。我相信大多数人都可以搞定,那么我们是否可以用更简便的方法呢例如string字符串,我们可以先将位数对齐再相加

#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){    string a,b;    cin>>a;    cin>>b;    int la=a.length();    int lb=b.length();    if(la>lb)//对齐位数    {        for(int i=0;i<la-lb;i++)        b='0'+b;    }    else if(la<lb)        for(int i=0;i<lb-la;i++)        a='0'+a;    int de=0;    for(int i=a.length()-1;i>=0;i--)//相加    {        a[i]=a[i]-'0'+b[i]-'0'+de;        de=a[i]/10;        a[i]=a[i]%10+'0';    }    if(de>0)        printf("%d",de);    cout<<a<<endl;}

大数乘法

#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){    string a;    int b;    cin>>a;    cin>>b;    int de=0;    for(int i=a.length()-1;i>=0;i--)    {        int c=a[i]-'0';        c=c*b+de;        de=c/10;        a[i]=c%10+'0';    }    while(de!=0)    {            char c=de%10+'0';            a=c+a;            de=de/10;    }    cout<<a<<endl;}

阶乘

#include<stdio.h>#include<string>#include<iostream>#include<cstring>using namespace std;int main(){    string a;    int n;    while(cin>>n)    {    a='1';    for(int i=1;i<=n;i++)    {        int de=0;         for(int j=a.length()-1;j>=0;j--)        {            int c=a[j]-'0';            c=c*i+de;            de=c/10;            a[j]=c%10+'0';        }        while(de!=0)        {            char c=de%10+'0';            a=c+a;            de=de/10;        }    }    cout<<a<<endl;    }}


0 0