#include <bits/stdc++.h>
using namespace std;
void jia(string s1,string s2){
bool aaa=0;
int a[5010],b[5010],c[5010];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int la=s1.length();
int lb=s2.length();
int lc;
if(la>lb){
lc=la;
}else{
lc=lb;
}
for(int i=0;i<la;i++){
a[la-i]=s1[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i]=s2[i]-'0';
}
for(int i=1;i<=lc;i++){
c[i]=a[i]+b[i];
if(aaa==1){
c[i]++;
}
if(c[i]>=10){
c[i]=c[i]-10;
aaa=1;
}else{
aaa=0;
}
}
if(aaa==1){
lc++;
c[lc]=1;
}
bool bbb=0;
for(int i=lc;i>0;i--){
if(c[i]==0&&bbb==0&&i>1){
}else{
cout<<c[i];
bbb=1;
}
}
}
void jian(string s1,string s2){
int l=0,l1=0,c[10005]={0},p=0;//每一位的差
string a=s1,b=s2;
a='0'+a;
b='0'+b;//将第0位占0
if(a.size()<b.size()||(a.size()==b.size()&&a<b))//假如a<b
{
cout<<'-';//结果为负数,先输出减号
swap(a,b);//交换两个数(例如3-5可以变为0-(5-3)),这样子方便后面计算
}
l=a.size();
l1=b.size();
while(l1<l)//因为已经确保这时b<a了,所以直接在b前面添0
{
b='0'+b;
l1++;
}//利用c++的特性让个位对齐
for(int i=1;i<l;i++)c[i]=a[i]-b[i];//计算差
while(1)//用来退位,因为可能要多次退位,所以用while循环
{
p=1;//开关,用来看是否需要退位
for(int i=1;i<l;i++)
{
if(c[i]<0)//需要退位
{
c[i-1]--;//向前一位退位
c[i]=10+c[i];
p=0;//开关置零,需要重新复查
}
}
if(p)break;//不需要退位了,就退出
}
p=1;
for(int i=1;i<l;i++){
if(c[i]!=0)p=0;
if(p==0)cout<<c[i];//特判前导0
}
if(p==1)cout<<0;//特判,可能结果本身就为0
}
void cheng(string s1,string s2){
int a[300001]={0},b[300001]={0},i=0,x=0,len=0,j=0,c[300001]={0};
a[0]=s1.length();b[0]=s2.length();//计算长度
for (i=1;i<=a[0];++i)a[i]=s1[a[0]-i]-'0';//将字符串转换成数字
for (i=1;i<=b[0];++i)b[i]=s2[b[0]-i]-'0';
for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];//按乘法
len=a[0]+b[0]; //原理进行高精乘
for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}//进位
while (c[len]==0&&len>1)len--;//判断位数
for (i=len;i>=1;--i)cout <<c[i];//输出
}
void chu(string a,int b){
int i=0,d=0;
string c;
for (;i<a.length();i++)a[i]-=48; //字符串转数字
for (i=0;i<a.length();i++)
c.push_back((d*10+a[i])/b+48),d=(d*10+a[i])%b; //模拟竖式
for (i=0;c[0]==48;i++)c.erase(c.begin(),c.begin()+1); //去0
cout<<c; //华丽的输出
}
int main(){
string s1,s2;
char q;
cin>>s1>>q>>s2;
while(1){}//抄袭可耻
if(q=='+'){
jia(s1,s2);
}else if(q=='-'){
jian(s1,s2);
}else if(q=='*'){
cheng(s1,s2);
}else{
int b;
for(int i=0;i<s2.length();i++){
b=b+s2[i]-'0';
if(i!=s2.length()-1){
b=b*10;
}
}
chu(s1,b);
}
return 0;
}
标签:lc,int,题解,s1,len,else,U255813,s2,争宠
From: https://www.cnblogs.com/Zhao-zzZ/p/U255813_zhengchongtijie.html