[BZOJ1754]牛的数学

来源:互联网 发布:安装linux的步骤 编辑:程序博客网 时间:2024/05/02 06:45

高精度乘法板子

</pre><pre name="code" class="cpp">#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<stack>#include<set>#include<map>#include<cmath>#include<iomanip>#define debug(x) cerr<<#x<<"="<<x<<endlusing namespace std;typedef pair<int,int> pii;typedef long long ll;const int INF = 0x7f7f7f7f;const ll llINF = 0x7fffffffff;inline int init(){    int now=0,ju=1;char c;bool flag=false;    while(1)    {        c=getchar();        if(c=='-')ju=-1;        else if(c>='0'&&c<='9')        {            now=now*10+c-'0';            flag=true;        }        else if(flag)return now*ju;    }}inline long long llinit(){    long long now=0,ju=1;char c;bool flag=false;    while(1)    {        c=getchar();        if(c=='-')ju=-1;        else if(c>='0'&&c<='9')        {            now=now*10+c-'0';            flag=true;        }        else if(flag)return now*ju;    }}struct bignumber{int num[10001];int length;};void print(bignumber k){for(int i=k.length;i>=1;i--){printf("%d",k.num[i]);}putchar('\n');}bignumber operator * (bignumber a,bignumber b){bignumber sum;int maxx=a.length+b.length+100;for(int i=1;i<=maxx;i++){sum.num[i]=0;}for(int i=1;i<=a.length;i++){for(int j=1;j<=b.length;j++){sum.num[i+j-1]+=a.num[i]*b.num[j];}}sum.length=a.length+b.length-1;for(int i=1;i<=sum.length;i++){if(sum.num[i]>=10){sum.num[i+1]+=sum.num[i]/10;sum.num[i]%=10;}}if(sum.num[sum.length+1]!=0)sum.length++;return sum;}int main(){bool judge1=0,judge2=0;bignumber a,b;char str[10001];scanf("%s",str+1);int len=strlen(str+1);if(str[1]=='-')judge1=1;for(int i=len;i>=1+judge1;i--){a.num[len-i+1]=str[i]-'0';}a.length=len-judge1;scanf("%s",str+1);len=strlen(str+1);if(str[1]=='-')judge2=1;for(int i=len;i>=1+judge2;i--){b.num[len-i+1]=str[i]-'0';}b.length=len-judge2;if((b.length==1&&b.num[1]==0)||(a.length==1&&a.num[1]==0)){printf("0\n");return 0;}bignumber ans;ans=a*b;if(judge1^judge2==1)printf("-");print(ans);return 0;}

0 0
原创粉丝点击