Wang_Neil @ 2024-09-11 13:42:35
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b)
{
string c;
int d=0,lena,lenb,x,y;
lena=a.length();
lenb=b.length();
if (lena > lenb)
{
for (int i = 1;i<=lena-lenb;i++)
{
b='0'+b;
}
}
else if (lenb > lena)
{
for (int i = 1;i<=lenb-lena;i++)
{
a='0'+a;
}
}
lenb=b.length();
lena=a.length();
for (int i=lena-1;i>=0;i--)
{
x=int(a[i]-'0');
y=int(b[i]-'0');
if (x+y+d >= 10)
{
c=char(x+y+d-10+'0')+c;
d=1;
}
else
{
c=char(x+y+d+'0')+c;
d=0;
}
}
if (d==1){c='1'+c;}
return c;
}
int main()
{
string a,b,c;//f存储每一次乘法后的个位数
int lena,lenb,x,y,d=0,e;//d储存进位数,e暂时存储乘法值
cin>>a>>b;
lena=a.length();
lenb=b.length();
for (int i=lenb-1;i>=0;i--)
{
string f="\0";
x=int(b[i]-'0');
for (int j=lena-1;j>=0;j--)
{
y=int(a[j]-'0');
if (x==0 || y==0)
{
f="0";
}
e=x*y+d;
if(e<10)
{
d=0;
f=char(e+'0')+f;
}
else if (e>=10 && e<20)
{
d=1;
f=char(e-10+'0')+f;
}
else if (e>=20 && e<30)
{
d=2;
f=char(e-20+'0')+f;
}
else if (e>=30 && e<40)
{
d=3;
f=char(e-30+'0')+f;
}
else if (e>=40 && e<50)
{
d=4;
f=char(e-40+'0')+f;
}
else if (e>=50 && e<60)
{
d=5;
f=char(e-50+'0')+f;
}
else if (e>=60 && e<70)
{
d=6;
f=char(e-60+'0')+f;
}
else if (e>=70 && e<80)
{
d=7;
f=char(e-70+'0')+f;
}
else if (e>=80 && e<90)
{
d=8;
f=char(e-80+'0')+f;
}
}
if (d!=0)
{
f=char(d+'0')+f;
d=0;
}
int i1=lenb-i-1;
while(i1>0)
{
i1--;
f=f+'0';
}
c=add(c,f);
}
if (a=="0" || b=="0"){c="0";}
cout<<c;
return 0;
}
by anonymous217 @ 2024-09-11 14:32:10
其实把string转换成int[]更好写吧,建议重构一遍
by Wang_Neil @ 2024-09-11 14:55:19
@anonymous217 怎么做?
by Wang_Neil @ 2024-09-11 16:01:54
道爷我成了!
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b)
{
string c;
int d=0,lena,lenb,x,y;
lena=a.length();
lenb=b.length();
if (lena > lenb)
{
for (int i = 1;i<=lena-lenb;i++)
{
b='0'+b;
}
}
else if (lenb > lena)
{
for (int i = 1;i<=lenb-lena;i++)
{
a='0'+a;
}
}
lenb=b.length();
lena=a.length();
for (int i=lena-1;i>=0;i--)
{
x=int(a[i]-'0');
y=int(b[i]-'0');
if (x+y+d >= 10)
{
c=char(x+y+d-10+'0')+c;
d=1;
}
else
{
c=char(x+y+d+'0')+c;
d=0;
}
}
if (d==1){c='1'+c;}
return c;
}
int main()
{
string a,b,c;//f存储每一次乘法后的个位数
int lena,lenb,x,y,d=0,e;//d储存进位数,e暂时存储乘法值
cin>>a>>b;
lena=a.length();
lenb=b.length();
for (int i=lenb-1;i>=0;i--)
{
string f="\0";
x=int(b[i]-'0');
for (int j=lena-1;j>=0;j--)
{
y=int(a[j]-'0');
if (x==0 )
{
f="0";
}
e=x*y+d;
for (int k=0;k<=9;k++)
{
if (e>=k*10 && e<(k+1)*10)
{
d=k;
f=char(e-k*10+'0')+f;
break;
}
}
}
if (d!=0)
{
f=char(d+'0')+f;
d=0;
}
int i1=lenb-i-1;
while(i1>0)
{
i1--;
f=f+'0';
}
c=add(c,f);
}
if (a=="0" || b=="0"){c="0";}
cout<<c;
return 0;
}