📄 very_long.cpp
字号:
#include "StdAfx.h"
#include "very_long_int.h"
very_long_int::very_long_int()
{
}
very_long_int very_long_int::operator +(const very_long_int& other_very_long)
{
unsigned carry=0,
large_size,
partial_sum;
very_long_int sum;
if(digits.size()>other_very_long.digits.size())
large_size=digits.size();
else
large_size=other_very_long.digits.size();
for(unsigned i=0;i<large_size;i++)
{
partial_sum=least(i)+other_very_long.least(i)+carry;
carry=partial_sum/10;
sum.digits.push_back(partial_sum%10);
}
if(carry==1)
sum.digits.push_back(carry);
reverse(sum.digits.begin(),sum.digits.end());
return sum;
}
char very_long_int::least(unsigned i)const
{
if(i>=digits.size())
return 0;
else
return digits[digits.size()-i-1];
}
very_long_int very_long_int::operator *(const very_long_int& other_very_long)
{
very_long_int multi;
very_long_int partial_sum;
unsigned int mul_time;
if (digits.size()<other_very_long.digits.size())
mul_time=digits.size();
else
mul_time=other_very_long.digits.size();
for (unsigned i=0;i<mul_time;i++)
{
partial_sum=Mul((int)other_very_long.least(i));
for(unsigned j=0;j<i;j++)
partial_sum.digits.push_back(0);
multi=multi+partial_sum;
}
return multi;
}
very_long_int very_long_int::Mul(int n)
{
very_long_int result;
int partial_sum;
int carry=0;
for (unsigned i=0;i<digits.size();i++)
{
partial_sum=least(i)*n+carry;
carry=partial_sum/10;
result.digits.push_back(partial_sum%10);
}
if (carry>0)
result.digits.push_back(carry);
reverse(result.digits.begin(),result.digits.end());
return result;
}
very_long_int very_long_int::Factorial(unsigned n)
{
very_long_int result;
result.digits.push_back(1);
for (unsigned i=0;i<n;i++)
{
result=result.Mul(n-i);
}
return result;
}
istream& operator>> (istream& instream,very_long_int& very_long)
{
const char LOWEST_DIGIT_CHAR='0';
const char HIGNEST_DIGIT_CHAR='9';
const char SENTINEL='X';
char digit_char;
very_long.digits.erase(very_long.digits.begin(),very_long.digits.end());
do{
instream>>digit_char;
if((LOWEST_DIGIT_CHAR<=digit_char)&&
(digit_char<=HIGNEST_DIGIT_CHAR))
very_long.digits.push_back(digit_char-LOWEST_DIGIT_CHAR);
}while(digit_char!=SENTINEL);
return instream;
}
ostream& operator<<(ostream& outstream,const very_long_int very_long)
{
for (unsigned i=0;i<very_long.digits.size();i++)
outstream<<(int)very_long.digits[i];
return outstream;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -