您的位置:首页 > 产品设计 > UI/UE

高精度运算-424 integer inquiry

2016-07-28 19:31 459 查看
题目大意:高精度计算

解题过程:虽然很简单,但是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: