Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
168533 A班-黄飞博 高精度乘法 C++ 解答错误 86 1 MS 272 KB 1163 2024-08-20 11:21:23

Tests(26/30):


#include<bits/stdc++.h> using namespace std; string A,B; const int MaxN=5001; // A、B位数不超过5000,A*B结果的位数也不超过5000 int a[MaxN], b[MaxN], c[MaxN], x; //设置x为进位 int main() { cin>>A>>B; int La=A.size(), Lb=B.size(); //将A、B每个字符串的(值)存放在数组,高位字符存放在低位数组位(倒序) for(int i=La; i>=1; i--) a[i]=A[La-i]-'0'; for(int i=Lb; i>=1; i--) b[i]=B[Lb-i]-'0'; //将b[1]~b[j]每一位数分别与a[i]相乘,结果存入c,考虑过程的进位x //123*45,3*5=15,进位x=1,c[i+j-1]=5 for(int i=1; i<=La; i++) { int x=0; //进位设置,每次相乘前归零 for(int j=1; j<=Lb; j++) { c[i+j-1]+=x+a[i]*b[j]; //a[i]的每位数,分别与b[1]~b[j]每位相乘,每次计算考虑进位x x=c[i+j-1]/10; //计算进位的数字 c[i+j-1]%=10; //计算进位后剩余的数字 } c[Lb+i]=x; //将所得进位合并后继续计算 } int Lc=La+Lb; for(int i=Lc; i>=1; i--) { if(c[i]>=1) { Lc=i; break; } } for (int i=Lc; i>=1; i--) //字符串倒序输出 cout<<c[i]; cout<<endl; }


测评信息: