DingTao @ 2024-08-09 11:06:22
#include <iostream>
#include <string>
using namespace std;
int main(){
string a , b;
int maxx, d,flag1 = 0,flag2 = 0,flag = 0;
int a1[5005] = { }, b1[5005] = { },ans[10010] = {};
getline(cin,a);
getline(cin,b);
maxx = a.size() > b.size() ? a.size():b.size();
for(int i = a.size() - 1;i >= 0;i --){
a1[a.size() - i] = a[i] - '0';
if(a1[a.size() - i] != 0) flag1 = 1;
}
for(int i = b.size() - 1;i >= 0;i --){
b1[b.size() - i] = b[i] - '0';
if(b1[b.size() - i] != 0) flag2 = 1;
}
if(flag1 == 0||flag2 == 0){
cout << 0;
return 0;
}
for(int i = 1;i <= a.size();i ++){
for(int j = 1;j <= b.size();j ++){
ans[i+j-1] += a1[i]*b1[j];
if(ans[i+j-1] >= 10){
ans[i+j] = ans[i+j] + ans[i+j-1]/10;
ans[i+j-1] = ans[i+j-1] % 10;
}
d = i + j-1;
}
}
if(ans[d+1] != 0) d ++;
for(int i = d;i >= 1;i --){
if(ans[i] != 0) flag = 1;
if(ans[i] == 0&&flag == 0) continue;
cout << ans[i];
}
return 0;
}
自己测试的第一个样例0*10,输出是0,提交第一个点都过不了,求助。
by DingTao @ 2024-08-09 14:26:08
测试了前三组数据都没问题,提交就wa,有没有大佬指点一下。
by DingTao @ 2024-08-09 16:03:45
把string 改成了 char就过了,不太懂原因,有没有大佬懂为什么。
by hzy_Q @ 2024-08-12 11:59:01
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[4100],b[4100],c[4100];//数组范围为最大位数*2
int main()
{
cin>>s1>>s2;
int n1=s1.size();
int n2=s2.size();
if(s1=="0"||s2=="0")
{
cout<<0;
return 0;
}
//翻转字符串,右对齐,个位对齐个位
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
//把字符串转换为数字
for(int i=0;i<n1;i++) a[i]=s1[i]-'0';
for(int i=0;i<n2;i++) b[i]=s2[i]-'0';
//列竖式相乘
for(int i=0;i<n1;i++)
{
for(int j=0;j<n2;j++)
{
c[i+j]+=a[i]*b[j];//第i位与第j位相乘的值存储在第i*j位
}
}
//进位
for(int i=0;i<4101;i++)
{
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
//倒着寻找最高位
int pos=4101;
while(c[pos]==0) pos--;
for(int i=pos;i>=0;i--) cout<<c[i];
return 0;
}