注册 登录
编程论坛 C++教室

高精度数和的平方

杜杜 发布于 2021-05-08 09:31, 2592 次点击
【问题描述】

请编程实现,输入两个数(位数不超过100位),输出它们的和的平方。

输入:两行,第一行为一个数a,第二行为一个数b。

输出:一行,一个数c(c>=0),表示a与b的和的平方。

【样例输入】

12345678

76

【样例输出】

152417641828516
1 回复
#2
spark_M2021-05-22 23:08
回复 楼主 杜杜
#include<bits/stdc++.h>
int a[10005],b[10005],c[10005],d[10005],l,la,lb;
//先进行c=a+b,然后d=c*c
int main(){
    char a1[2005],b1[2005];
    scanf("%s%s",a1,b1);
    la=strlen(a1); lb=strlen(b1);
    for(int i=la-1;i>=0;i--) a[la-i]=a1[i]-'0';
    for(int i=lb-1;i>=0;i--) b[lb-i]=b1[i]-'0';
    l=la>lb?la:lb;
    for(int i=1;i<=l;i++){
        c[i]+=a[i]+b[i];
        c[i+1]=c[i]/10;
        c[i]%=10;
    }//高精加
    for(int i=1;i<=l;i++)
        for(int j=1;j<=l;j++)
            d[i+j-1]+=c[i]*c[j];
    l*=l;
    for(int i=1;i<=l;i++){
        d[i+1]+=d[i]/10;
        d[i]%=10;
    }
    while(!d[l]) l--;//高精乘
    for(int i=l>1?l:1;i>0;i--) printf("%d",d[i]);
    return 0;
}
1