题目:
字符串输入后要反转字符串从后向前加、减、乘
加法就逐位相加
减法分为三部分:
1.字符串1比字符串2长减法结果肯定为正数
2.字符串2比字符串1长减法结果肯定为负数
3.字符串1和字符串2长度相等,就需要判断字符串之间的大小
乘法:
字符串1遍历乘字符串2,
#include <bits/stdc++.h>
using namespace std;
int a[100010],s[100010],m[100010],len=0;
string str1,str2;
void add()
{
int l=max(str1.size(),str2.size()),u,v;
for(int i=0;i<max(str1.size(),str2.size());i++)
{
if(i<str1.size())
u=str1[i]-'0';
else
u=0;
if(i<str2.size())
v=str2[i]-'0';
else
v=0;
a[i]+=u+v;
if(a[i]>9)
{
a[i+1]+=a[i]/10;
a[i]%=10;
if(i+1==l)
l++;
}
}
while(a[l-1]>9)
{
a[l]+=a[l-1]/10;
a[l-1]%=10;
l++;
}
for(int i=l-1;i>=0;i--)
cout<<a[i];
}
void sub()
{
string st1,st2;
st1=str1;
st2=str2;
int l=max(st1.size(),st2.size()),u,v,f=0;
if(st1.size()>st2.size()||(st1.size()==st2.size()&&st1<=st2))
{
for(int i=0;i<st1.size();i++)
{
if(i<st1.size())
u=st1[i]-'0';
else
u=0;
if(i<st2.size())
v=st2[i]-'0';
else
v=0;
if(u<v)
{
st1[i+1]-=1;
u+=10;
}
s[i]+=u-v;
}
}
else if(st1.size()<st2.size()||(st1.size()==st2.size()&&st1>st2))
{
f=1;
for(int i=0;i<st2.size();i++)
{
if(i<st1.size())
u=st1[i]-'0';
else
u=0;
if(i<st2.size())
v=st2[i]-'0';
else
v=0;
if(u>v)
{
st2[i+1]-=1;
v+=10;
}
s[i]+=v-u;
}
}
if(f)
cout<<"-";
while(l>0&&s[l]==0)
l--;
for(int i=l;i>=0;i--)
cout<<s[i];
}
void mul()
{
int l,u,v,t;
for(int i=0;i<str1.size();i++)
{
u=str1[i]-'0';
t=i;
//cout<<i<<":";
for(int j=0;j<str2.size();j++)
{
v=str2[j]-'0';
m[t]+=u*v;
//cout<<u<<" "<<v<<" "<<m[t]<<endl;
if(m[t]>9)
{
m[t+1]+=m[t]/10;
m[t]%=10;
}
t++;
}
while(m[t]>9)
{
m[t+1]+=m[t]/10;
m[t]%=10;
t++;
}
if(t>l)
l=t;
}
while(l>0&&m[l]==0)
l--;
for(int i=l;i>=0;i--)
cout<<m[i];
}
int main()
{
string str3,str4;
getline(cin,str1);
getline(cin,str2);
reverse(str1.begin(),str1.end());//反转字符串
reverse(str2.begin(),str2.end());
add();//加法
cout<<endl;
sub();//减法
cout<<endl;
mul();//乘法
}