GJY201112 @ 2023-04-06 20:22:42
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char a1[101],b1[101];
int a[101],b[101],c[10001],lena,lenb,lenc,i,j,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%s",a1);
scanf("%s",b1);
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<=lena-1;i++)
a[lena-i]=a1[i]-48;
for(i=0;i<=lenb-1;i++)
b[lenb-i]=b1[i]-48;
for(i=1;i<=lena;i++)
{
x=0;
for(j=1;j<=lenb;j++)
{
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lenb]=x;
}
lenc=lena+lenb;
while(c[lenc]==0&&lenc>1)
lenc--;
for(i=lenc;i>=1;i--)
cout<<c[i];
cout<<endl;
}
by kn_wlq @ 2023-04-06 21:45:39
这道题就是先转换,再计算,弄进位,特判,输出完事,你while应该是lenc>0吧,上面为什么清三次呢,满分代码(蒟蒻):
#include<iostream>
#include<string>
using namespace std;
string s1,s2;
int l1,l2,l;
int a[10087],b[10087],c[10087];
int main(){
cin>>s1>>s2;
l1=s1.length();
l2=s2.length();
for(int i=0;i<l1;i++){
a[i]=s1[l1-i-1]-48;//转换
}
for(int i=0;i<l2;i++){
b[i]=s2[l2-i-1]-48;//转换
}
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
c[i+j]+=a[i]*b[j];//得数位数等于两个乘积的位数相加
}
}
l=l1+l2;
for(int i=0;i<l;i++){
if(c[i]>9){//进位
c[i+1]=c[i+1]+c[i]/10;
c[i]%=10;
}
}
while(c[l]==0&&l>0){
l--;
}
for(int i=l;i>=0;i--){
cout<<c[i];
}
}
最好还是自己写哈,可以看看,但是别ctrl c,v
求关注
by GJY201112 @ 2023-04-09 13:35:18
Thank you!已关!
by zzhlzy200912 @ 2023-05-13 15:42:39
@kn_wlq 用得着这么麻烦吗?、 python一行就能搞定了 print(int(input())*int(input()))