LEle0309 @ 2023-03-08 22:03:01
#include<iostream>
#include<cstring>
using namespace std;
int i,a[2011],b[2011],c[4023],l1,l2,l3,j;
char k[2011],h[2011];
int main()
{
cin>>k>>h;
l1=strlen(k);
l2=strlen(h);
for(i=1;i<=l1;i++)a[i]=k[l1-i]-'0';
for(i=1;i<=l2;i++)b[i]=h[l2-i]-'0';
l3=l1+l2;
for(i=1;i<=l1;i++)
for(j=1;j<=l2;j++)
c[i+j-1]=a[i]*b[j];
l3=l2+l1;
for(i=1;i<=l3;i++)
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[l3]==0&&l3>1)l3--;
for(i=l3;i>=1;i--)cout<<c[i];
return 0;
}
Here is the record,这里是记录
by tangguo_yyds @ 2023-03-08 22:09:32
代码的差异似大非大
#include<iostream>
#include<cstring>
using namespace std;
int i,a[2011],b[2011],c[4023],l1,l2,l3,j;
char k[2011],h[2011];
int main()
{
cin>>k>>h;
l1=strlen(k);
l2=strlen(h);
for(i=1;i<=l1;i++)a[i]=k[l1-i]-'0';
for(i=1;i<=l2;i++)b[i]=h[l2-i]-'0';
l3=l1+l2;
for(int i=1;i<=l2;i++){
for(int j=1;j<=l1;j++){
c[i+j-1]+=b[i]*a[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
while(c[l3]==0&&l3>1)l3--;
for(i=l3;i>=1;i--)cout<<c[i];
return 0;
}
by LEle0309 @ 2023-03-08 22:33:46
@tangguo_yyds
54最后统一进位滴……
by LEle0309 @ 2023-03-10 21:37:22
@tangguo_yyds
已AC,谢谢
顺便问个问题
我之前那个最后统一进位为啥20分?
by tangguo_yyds @ 2023-03-10 23:53:47
@LEle0309 统一进位的代码好像得这样写
#include<iostream>
#include<cstring>
using namespace std;
int i,a[2011],b[2011],c[4023],l1,l2,l3,j;
char k[2011],h[2011];
int main()
{
cin>>k>>h;
if(k[0]=='0'||h[0]=='0'){
cout<<"0";
return 0;
}
l1=strlen(k);
l2=strlen(h);
for(i=1;i<=l1;i++)a[i]=k[l1-i]-'0';
for(i=1;i<=l2;i++)b[i]=h[l2-i]-'0';
for(i=1;i<=l1;i++)
for(j=1;j<=l2;j++)
c[i+j]+=a[i]*b[j];
for(i=1;i<=4000;i++){//数据范围的2倍
c[i+1]+=c[i]/10;
c[i]%=10;
l3=i;
}
while(c[l3]==0&&l3>1)l3--;
for(i=l3;i>1;i--)cout<<c[i];
return 0;
}
by tangguo_yyds @ 2023-03-10 23:56:09
@LEle0309
20分你对的只是第一个数据
输入
0
10
输出
0
这个测试当然是不用进位的,所以能过,其他因为进位的问题,结果基本都是错的,还是推荐你边加边进位
by LEle0309 @ 2023-03-11 13:42:12
@tangguo_yyds
谢谢~
Thanks♪(・ω・)