uva-424-大数相加

2014-11-24 08:46:08 · 作者: · 浏览: 0

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

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

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 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; const int maxn=1000; struct bign { int len,s[maxn]; bign() { memset(s,0,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
       
        1&&!s[len-1]) len--; } bool operator == (const int num) { if(num==0) return true; else false; } // return !(b<*this)&&!(*this
        
         > (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<