题目大意:高精度计算
解题过程:虽然很简单,但是WA了无数次,仔细检查之后,主要问题出在,虽然输入过程中字符串最长只有100,但是计算结果最长有102,改正过后AC
正确代码:
# include <cstdio>
# include <cstdlib>
# include <ctime>
# include <cmath>
# include <iostream>
# include <fstream>
# include <cstring>
# include <string>
# define maxn 200
//*
#define fin cin
#define fout cout
//*/
using namespace std;
/*
ifstream fin("in.txt");
ofstream fout("out.txt");
//*/
struct bign{
int len,s[maxn];
bign(){
memset(s,0,sizeof(s));
len=1;
}
bign operator =(const char* num){
len=strlen(num);
int i;
for(i=0;i<len;i++){
if(num[i]!='0') break;
}
for(int j=len-1,k=0;j>=i;j--,k++){
s[k]=num[j]-'0';
}
len-=i;
s[len]='\0';
return *this;
}
bign operator = (int num){
char s[maxn];
sprintf(s,"%d",num);
* this=s; //调用上一个函数
return *this;
}
//为了能直接赋值,增加以下两个函数 bign x=num;
bign(int num){
*this=num;
}
bign(const char* num){
*this=num;
}
bign operator + (const bign& b) const
{
bign c;
c.len=0;
for(int i=0,g=0;g||i<max(len,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;
}
//将int数组保存的结果转化为字符串
string str() const
{
string res="";
for(int i=0;i<len;i++){
res=(char)(s[i]+'0')+res;
}
if(res=="") res="0";
return res;
}
};
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;
}//注意,连接顺序,是反向连接
bign factor[200];
int main()
{
int numoffac=0;
bign result=0;
char temp[maxn];
while(fin>>temp&&strcmp(temp,"0")!=0){
factor[numoffac]=temp;
result=result+factor[numoffac];
numoffac++;
}
fout<<result;
fout<<endl;
return 0;
}