社区讨论
手写string爆空间了
P1601高精度加法参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lpl7d2tj
- 此快照首次捕获于
- 2023/11/30 20:59 2 年前
- 此快照最后确认于
- 2023/12/01 09:11 2 年前
CPP
#include<iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
using namespace std;
class cstr{
private:
vector<char>a;
int len;
public:
void clear(){
a.clear();
len=0;
}
const int size()const{
return len;
}
const int length()const{
return len;
}
void reserve(int num){
a.reserve(num);
}
void pop_back(){
a.pop_back();
len--;
}
void push_back(char v){
a.push_back(v);
len++;
}
void push_chars(const char*v){
int lenv=strlen(v);
reserve(lenv+10);
for(int i=0;i<lenv;i++)push_back(v[i]);
}
void push_cstr(cstr&v){
int lenv=v.size();
reserve(lenv+10);
for(int i=0;i<lenv;i++)push_back(v[i]);
}
cstr(const char*init){
clear();
push_chars(init);
}
cstr(){
clear();
reserve(10);
len=0;
}
char operator[](int p)const{
return this->a[p];
}
char&operator[](int p){
return this->a[p];
}
cstr operator=(cstr v){
if(this==&v)return*this;
this->clear();
this->reserve(v.size()+10);
for(int i=0;i<v.size();i++)this->push_back(v[i]);;
return *this;
}
cstr&operator=(const char*v){
int lenv=strlen(v);
this->clear();
this->reserve(lenv+10);
for(int i=0;i<=lenv;i++)this->push_back(v[i]);
return *this;
}
cstr&operator+=(const char*v){
int lena=this->len,lenv=strlen(v);
this->reserve(lena+lenv+10);
for(int i=0;i<lenv;i++)this->push_back(v[i]);
return*this;
}
cstr operator+(const char*v){
int lenv=strlen(v),lena=this->size();
cstr ans;
for(int i=0;i<lena;i++)ans.push_back(this->a[i]);
for(int i=0;i<lenv;i++)ans.push_back(v[i]);
return ans;
}
void charsit(char*v){
for(int i=0;i<len;i++)v[i]=a[i];
}
void getcstr(char stop){
char num;
bool fir=true;
while(num!=stop||fir){
num=getchar();
push_back(num);
fir=false;
}
return;
}
void getcstr(){
getcstr('\n');
}
friend istream&operator>>(istream&,cstr&);
friend ostream&operator<<(ostream&,cstr&);
friend cstr operator+(const char*,cstr&);
friend cstr operator+(cstr&,cstr&);
};
istream&operator>>(istream&input,cstr&str){
str.clear();
char ch=getchar();
while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();
while(ch!=' '&&ch!='\n'&&ch!='\r'){
str.push_back(ch);
ch=getchar();
}
return input;
}
ostream&operator<<(ostream&output,const cstr&str){
for(int i=0;i<str.size();i++)putchar(str[i]);
return output;
}
ostream&operator<<(ostream&output,cstr&str){
for(int i=0;i<str.size();i++)putchar(str[i]);
return output;
}
cstr operator+(const char*p,cstr&v){
int lena=strlen(p),lenv=v.size();
cstr ans;
for(int i=0;i<lena;i++)ans.push_back(p[i]);
for(int i=0;i<lenv;i++)ans.push_back(v[i]);
return ans;
}
cstr operator+(cstr&a,cstr&v){
int lena=a.size(),lenv=v.size();
cstr ans;
for(int i=0;i<lena;i++)ans.push_back(a[i]);
for(int i=0;i<lenv;i++)ans.push_back(v[i]);
return ans;
}
cstr operator+(const char v,cstr&a){
int lena=a.size();
cstr ans;
ans.push_back(v);
for(int i=0;i<lena;i++)ans.push_back(a[i]);
return ans;
}
cstr add(cstr str1,cstr str2){
cstr str;
int len1=str1.length();
int len2=str2.length();
if(len1<len2)
for(int i=1;i<=len2-len1;i++)
str1="0"+str1;
else
for(int i=1;i<=len1-len2;i++)
str2="0"+str2;
len1=str1.length();
int cf=0;
int temp;
for(int i=len1-1;i>=0;i--){
temp=str1[i]-'0'+str2[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0)str=char(cf+'0')+str;
return str;
}
cstr a,b;
int main(){
cin>>a>>b;
cout<<add(a,b);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...