1065 A+B and C (64bit),解答
#include <bits/stdc++.h>
using namespace std;
const int maxn=10000;
struct BigInteger{
int digit[maxn];
int length;
BigInteger();
BigInteger(int x);
BigInteger(string str);
BigInteger(const BigInteger& b);
BigInteger operator=(int x);
BigInteger operator=(string str);
BigInteger operator=(const BigInteger& b);
bool operator<=(const BigInteger& b);
bool operator==(const BigInteger& b);
BigInteger operator+(const BigInteger& b);
BigInteger operator-(const BigInteger& b);
BigInteger operator*(const BigInteger& b);
BigInteger operator/(const BigInteger& b);
BigInteger operator%(const BigInteger& b);
friend istream& operator>>(istream& in,BigInteger& b);
friend ostream& operator<<(ostream& out,BigInteger& b);
};
BigInteger::BigInteger(){
memset(digit,0,sizeof(digit));
length=0;
}
BigInteger::BigInteger(int x){
memset(digit,0,sizeof(digit));
length=0;
if(!x) digit[length++]=x;
while(x){
digit[length++]=x%10;
x/=10;
}
}
BigInteger::BigInteger(string str){
memset(digit,0,sizeof(digit));
length=str.size();
for(int i=0;i<length;i++){
digit[i]=str[length-i-1]-'0';
}
}
BigInteger::BigInteger(const BigInteger& b){
memset(digit,0,sizeof(digit));
length=b.length;
for(int i=0;i<length;i++){
digit[i]=b.digit[i];
}
}
BigInteger BigInteger::operator=(int x){
memset(digit,0,sizeof(digit));
length=0;
if(!x){
digit[length++]=x;
}
while(x){
digit[length++]=x%10;
x/=10;
}
return *this;
}
BigInteger BigInteger::operator=(string str){
memset(digit,0,sizeof(digit));
length=str.size();
for(int i=0;i<length;i++){
digit[i]=str[length-i-1]-'0';
}
return *this;
}
BigInteger BigInteger::operator=(const BigInteger& b){
memset(digit,0,sizeof(digit));
length=b.length;
for(int i=0;i<length;i++){
digit[i]=b.digit[i];
}
return *this;
}
bool BigInteger::operator<=(const BigInteger& b){
if(length<b.length) {
return true;
}
else if(b.length<length) {
return false;
}
else{
for(int i=length-1;i>=0;i--){
if(digit[i]==b.digit[i]) continue;
else return digit[i]<b.digit[i];
}
}
return true;
}
bool BigInteger::operator==(const BigInteger& b){
if(length!=b.length)
return false;
for(int i=0;i<length;i++){
if(digit[i]!=b.digit[i])
return false;
}
return true;
}
BigInteger BigInteger::operator+(const BigInteger& b){
int flag=0,temp;
BigInteger ans;
for(int i=0;i<length || i<b.length;i++){
temp=digit[i]+b.digit[i]+flag;
ans.digit[ans.length++]=temp%10;
flag=temp/10;
}
if(flag){
ans.digit[length++]=flag;
}
return ans;
}
BigInteger BigInteger::operator-(const BigInteger& b){
BigInteger ans;
int flag=0,temp;
for(int i=0;i<length || i<b.length;i++){
temp=digit[i]-b.digit[i]-flag;
if(temp<0){
temp+=10;
flag=1;
}
else{
flag=0;
}
ans.digit[ans.length++]=temp;
}
while(ans.digit[ans.length-1]==0 && ans.length>1>1) ans.length--;
return ans;
}
BigInteger BigInteger::operator*(const BigInteger& b){
BigInteger ans;
ans.length=length+b.length;
for(int i=0;i<length;i++){
for(int j=0;j<b.length;j++){
ans.digit[i+j]+=digit[i]*b.digit[j];
}
}
for(int i=0;i<ans.length;i++){
ans.digit[i+1]+=ans.digit[i]/10;
ans.digit[i]%=10;
}
while(ans.digit[ans.length-1]==0 && ans.length>1>1) ans.length--;
return ans;
}
BigInteger BigInteger::operator/(const BigInteger& b){
BigInteger remainder=0;
BigInteger temp=b;
BigInteger ans;
ans.length=length;
for(int i=length-1;i>=0;i--){
if(!(remainder.digit[0]==0 && remainder.length==1)){
for(int j=remainder.length-1;j>=0;j--){
remainder.digit[j+1]=remainder.digit[j];
}
remainder.length++;
}
remainder.digit[0]=digit[i];
while(temp <= remainder){
remainder=remainder-temp;
ans.digit[i]++;
}
}
while(ans.digit[ans.length-1]==0 && ans.length>1) ans.length--;
return ans;
}
BigInteger BigInteger::operator%(const BigInteger& b){
BigInteger remainder=0;
BigInteger temp=b;
for(int i=length-1;i>=0;i--){
if(!(remainder.digit[0]==0 && remainder.length==1)){
for(int j=remainder.length-1;j>=0;j--){
remainder.digit[j+1]=remainder.digit[j];
}
remainder.length++;
}
remainder.digit[0]=digit[i];
while(temp <= remainder){
remainder=remainder-temp;
}
}
return remainder;
}
istream& operator>>(istream& in,BigInteger& b){
string str;
in>>str;
b=str;
return in;
}
ostream& operator<<(ostream& out,BigInteger& b){
for(int i=b.length-1;i>=0;i--){
out<<b.digit[i];
}
return out;
}
int main(){
BigInteger res=BigInteger("1345")/BigInteger("5");
cout << res << endl;
}
#include<bits/stdc++.h>
using namespace std;
#define maxDigits 1e5
class bigInt{
public:
vector<int> digits;
int len;
bigInt(){
digits.resize(maxDigits);
len=0;
}
bigInt(const string& str){
digits.resize(maxDigits);
len=0;
for (int i=str.size()-1;i>=0;i--){
digits[len++]=str[i]-'0';
}
}
bool operator==(const bigInt& b)const{
if (len!=b.len) return false;
for (int i=0;i<len;i++){
if (digits[i]!=b.digits[i]) return false;
}
return true;
}
bool operator<=(const bigInt& b)const{
if (len<b.len) return true;
if (len>b.len) return false;
for (int i=len-1;i>=0;i--){
if (digits[i]==b.digits[i]) continue;
else return digits[i]<b.digits[i];
}
return true;
}
bigInt operator+(const bigInt& b)const{
int carry=0;
bigInt answer;
for (int i=0;i<len || i<b.len;i++){
int current=digits[i]+b.digits[i]+carry;
if (current>10){
carry=1;
current-=10;
}
else carry=0;
answer.digits[answer.len++]=current;
}
if (carry) answer.digits[answer.len++]=carry;
return answer;
}
bigInt operator-(const bigInt& b)const{
int carry=0;
bigInt answer;
for (int i=0;i<len || i<b.len;i++){
int current=digits[i]-b.digits[i]-carry;
if (current<0){
carry=1;
current+=10;
}
else carry=0;
answer.digits[answer.len++]=current;
}
while (answer.digits[answer.len-1]==0 && answer.len>1) answer.len--;
return answer;
}
bigInt operator*(const bigInt& b)const{
bigInt answer;
answer.len=b.len+len;
for (int i=0;i<len;i++){
for (int j=0;j<b.len;j++){
answer.digits[i+j]+=digits[i]*b.digits[j];
}
}
for (int i=0;i<answer.len;i++){
answer.digits[i+1]+=answer.digits[i]/10;
answer.digits[i]%=10;
}
while (answer.digits[answer.len-1]==0 && answer.len>1) answer.len--;
return answer;
}
bigInt operator/(const bigInt& b)const{
bigInt tmp=b,remainder("0"),answer;
answer.len=len;
for (int i=len-1;i>=0;i--){
if (!(remainder.digits[0]==0 && remainder.len==1)){
for (int j=remainder.len-1;j>=0;j--){
remainder.digits[j+1]=remainder.digits[j];
}
remainder.len++;
}
remainder.digits[0]=digits[i];
while (tmp<=remainder){
remainder=remainder-tmp;
answer.digits[i]++;
}
}
while (answer.digits[answer.len-1]==0 && answer.len>1) answer.len--;
return answer;
}
bigInt operator%(const bigInt& b)const{
bigInt tmp=b,remainder("0");
for (int i=len-1;i>=0;i--){
if (!(remainder.digits[0]==0 && remainder.len==1)){
for (int j=remainder.len-1;j>=0;j--){
remainder.digits[j+1]=remainder.digits[j];
}
remainder.len++;
}
remainder.digits[0]=digits[i];
while (tmp<=remainder){
remainder=remainder-tmp;
}
}
return remainder;
}
};
ostream& operator<<(ostream& out,const bigInt& b){
for (int i=b.len-1;i>=0;i--) out << b.digits[i];
return out;
}
int main(){
int n,m;
bigInt inf("1"),two("2");
for (int i=0;i<10;i++) inf=inf*two;
cout << inf << endl;
}