高精度运算-424 integer inquiry

题目大意:高精度计算

解题过程:虽然很简单,但是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;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值