Jerry555 @ 2024-02-19 21:03:13
#include <string>
#include <iostream>
using namespace std;
string removeLeadingZeros(const string& str) {
size_t pos = str.find_first_not_of('0');
if (pos != std::string::npos) {
return str.substr(pos);
}
return "0";
}
class BigNumber {
public:
std::string number;
int len;
bool empty = true;
BigNumber() {
}
BigNumber(std::string NewNum) {
number = NewNum;
len = NewNum.length()-1;
empty = false;
}
void InitIn() {
std::cin >> number;
len = number.length()-1;
empty = false;
}
void Output() {
std::cout << number;
}
void Delete() {
empty = true;
number = "";
len = 0;
}
};
BigNumber c;
BigNumber operator+(BigNumber a,BigNumber b) {
BigNumber* p;
if (a.empty or b.empty)throw "BigNumber_Is_Empty";
removeLeadingZeros(a.number);
removeLeadingZeros(b.number);
if (a.len != b.len) {
int temp = max(a.len, b.len) - min(a.len, b.len);
bool ABig = a.len > b.len;
if (!ABig)p = &a;
else p = &b;
for (int i = 0; i <= temp - 1;i++){
p->number.insert(0, "0");
p->len++;
}
}
c.len=a.len+1;
c.number.reserve(a.len+1);
bool flag = false;
for (int i = a.len; i >= 0; i--) {
int te=(a.number.at(i)-'0') + (b.number.at(i)-'0') + flag + '0';
c.number.insert(0, string(1,(a.number.at(i)-'0') + (b.number.at(i)-'0') + flag + '0'));
flag = false;
if (c.number[0] > '9')c.number[0] -= 10, flag = true;
}
if (flag)c.number.insert(0, "1");
return c;
}
int main(){
BigNumber a,b;
a.InitIn();
b.InitIn();
BigNumber t;
t=a+b;
t.Output();
}
60分 AAAWWWAWAA
by cff_0102 @ 2024-02-19 21:04:44
@Jerry555 根据你的程序,-1+-1=*2
by quxiangyu @ 2024-02-19 21:30:53
@Jerry555 你用的高精度吧
by quxiangyu @ 2024-02-19 21:33:28
可以这么写,但是过不了→_→
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
struct bign
{
int len,s[N];
bign() { memset(s,0,sizeof(s)); len=1; }
bign(int num) { *this=num; }
bign(char *num) { *this=num; }
bign operator =(int num)
{
char c[N];
sprintf(c,"%d",num);
*this=c;
return *this;
}
bign operator =(const char *num)
{
len=strlen(num);
for (int i=0;i<len;i++) s[i]=num[len-1-i]-'0';
return *this;
}
string str()
{
string res="";
for (int i=0;i<len;i++) res=(char)(s[i]+'0')+res;
return res;
}
void clean()
{
while (len>1&&!s[len-1]) len--;
}
bign operator +(const bign &b)
{
bign c;
c.len=0;
for (int i=0,g=0;g||i<len||i<b.len;i++)
{
int x=g;
if (i<len) x+=s[i];
if (i<b.len) x+=b.s[i];
c.s[c.len++]=x%10;
g=x/10;
}
return c;
}
bign operator -(const bign &b)
{
bign c;
c.len=0;
int x;
for (int i=0,g=0;i<len;i++)
{
x=s[i]-g;
if (i<b.len) x-=b.s[i];
if (x>=0) g=0;
else{
x+=10;
g=1;
};
c.s[c.len++]=x;
}
c.clean();
return c;
}
bign operator *(const bign &b)
{
bign c;
c.len=len+b.len;
for (int i=0;i<len;i++) for (int j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];
for (int i=0;i<c.len-1;i++) { c.s[i+1]+=c.s[i]/10; c.s[i]%=10; }
c.clean();
return c;
}
bool operator <(const bign &b)
{
if (len!=b.len) return len<b.len;
for (int i=len-1;i>=0;i--)
if (s[i]!=b.s[i]) return s[i]<b.s[i];
return false;
}
bign operator +=(const bign &b)
{
*this=*this+b;
return *this;
}
bign operator -=(const bign &b)
{
*this=*this-b;
return *this;
}
};
istream& operator >>(istream &in,bign &x)
{
string s;
in>>s;
x=s.c_str();
return in;
}
ostream& operator <<(ostream &out,bign &x)
{
out<<x.str();
return out;
}
int main(){
bign a,b,c;
ios::sync_with_stdio(false);
cin>>a>>b;
// cout<<a<<endl;
// cout<<b<<endl;
c=a+b;
cout<<c<<endl;
return 0;
}
by dmx7u19x @ 2024-02-22 09:27:30
为什么你不会用a+b呢
by __youzimo2014__ @ 2024-02-25 15:23:38
@Jerry555 你把这个代码提交到这道题就应该能过。
这道题有负数哦。
#include <bits/stdc++.h>
using namespace std;int main() {int a, b;cin >> a >> b; cout << a + b << endl;return 0;}
只有两行哦
求互关 QAQ