加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

uva-424-大数相加

发布时间:2020-12-14 03:44:23 所属栏目:大数据 来源:网络整理
导读:????? 最近一周真是心累,碰上的题各种不会,但自己感觉还是学了不少的东西.下面将这个看了很久的大数操作的题目分析一下. ????? 核心代码是刘汝佳入门书上的代码,其中有很多自己不明白的地方,借助注释理一下自己的思路. ????? 1.c++知识忘得差不多了,结构体st

????? 最近一周真是心累,碰上的题各种不会,但自己感觉还是学了不少的东西.下面将这个看了很久的大数操作的题目分析一下.

????? 核心代码是刘汝佳入门书上的代码,其中有很多自己不明白的地方,借助注释理一下自己的思路.

????? 1.c++知识忘得差不多了,结构体struct bign{}中bign()是构造函数,其功能是初始化,下面连续三个函数也是初始化

????? 2.重载运算符的方法,这块知识当时学习时没有明白,现在很是吃力,

????? 3.sprintf(s,"%d",num)函数的用法:将int数组以整数的形式打印到char数组s中去,然后在输出s用print("%s",s);.c_str()函数的用法:将一个string转化为const char*

?????

    语法: 
       const char *c_str();
          c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同. 
       这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
      注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 
        比如:最好不要这样: 
       char* c; 
       string s="1234"; 
       c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理

       应该这样用: 
        char c[20]; 
       string s="1234"; 
        strcpy(c,s.c_str()); 
         这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作

????? 4. 有个bug,我没有判断输入结束标志0,而是骗了过去


#include <iostream>
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <cstring>
using namespace std;
const int maxn=1000;
struct bign
{

	int len,s[maxn];
	bign()
	{
	
		memset(s,sizeof(s));
		len=1;
	}

	bign(int num)//这下面也都是构造函数,变量初始化用的,简单的调用"="重载赋值				//运算符
	{

		*this=num;//what's meaning?如果你创建一个类,那么这个类本身的指针就叫					//做this 指针

	}
	bign(const char* num)
	{
		*this = num;
	}
	bign operator = (const char* num)
	{
		 len=strlen(num);
		for(int i=0;i<len;i++)
			s[i]=num[len-i-1]-'0';//利用AscII编码(0:60),字符数组转换成整数类型数组
		return *this;
	}
	bign operator = (int num)
	{
		char a[maxn];
		sprintf(a,num);//把整形数字转换到字符数组中
		*this=a;
		return *this;

		
	}
	string str() const//x.str()不会改变x//转换为 字符串
	{

		string res = "";
		for(int i=0;i<len;i++)
			res=(char)(s[i]+'0')+res;//强制转换成字符串,因为string类型可以直										//接使用"+-"符号
		if(res=="")
			res="0";
		return res;
	}
	bign operator + (const bign& b) const//这些函数后面的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;//进位并加1
		}
		return c;
	}
	void Clean()
	{
		while(len>1&&!s[len-1])
			len--;
	}
		
bool operator == (const int num) {
	
	if(num==0)
		return true;
	else
		false;
}

//	return !(b<*this)&&!(*this<b);
//}	

};
istream& operator >> (istream &in,bign& x) {
  string s;
  in >> s;
  x = s.c_str();
  return in;
}

ostream& operator << (ostream &out,const bign& x) {
  out << x.str();
  return out;
}

int main()
{
	
	//freopen("424.txt","r",stdin);
	bign a,b,c,sum="0";

	while(cin>>a)
	{	
		
		
	
	
    // 	if(a.s[0]==0)
		//	break;
	//	else
		sum=sum+a;
	}
	cout<<sum<<endl;
	return 0;




}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读