码家

Web Platform, Cloud and Mobile Application Development

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

#include<iostream>
using namespace
std;

#define Base 10
#define MaxLen  1000

struct
BigInt

{
    int
len;
    int
data[MaxLen];
   
    BigInt() :len(0) {}
    BigInt(const BigInt& s) :len(s.len){
        memcpy(this->data,s.data,len*sizeof(*data));
    }

    BigInt(int s) :len(0){
        for
(;s>0;s=s/Base)
            data[len++]=s%Base;
    }


    BigInt & operator = (const BigInt& s){
        this
->len=s.len;
        memcpy(this->data,s.data,len*sizeof(*data));
        return
*this;
    }


    int
& operator [](int index){ return data[index]; }
    int
operator [](int index) const { return data[index]; }
};


BigInt operator + (BigInt & a, BigInt & b){
    BigInt c;
    int
i,carry=0;
    c.len=a.len>b.len?a.len:b.len;
    for
(i=0;i<c.len||carry>0;++i){
        if
(i<a.len)    carry+=a[i];
        if
(i<b.len)    carry+=b[i];
        c[i]=carry%Base;
        carry/=Base;
    }

    c.len=i;
    return
c;
}


istream & operator >> (istream & is, BigInt & s)
{

    int
i;
    char
ch[MaxLen];
    is>>ch;
    s.len=strlen(ch);
    for
(i=s.len-1;i>-1;--i)
        s[i]=ch[s.len-1-i]-'0';
    return
is;
}


ostream & operator << (ostream & os, BigInt & s)
{

    int
i;
    for
(i=s.len-1;i>-1;--i)
        os<<s[i];
    return
os;
}


/*操作系统进入函数的入口*/


int main () {
    int
n,i;           //n表示有几行需要相加,i用来作为循环变量
    BigInt a,b,c;             //BigInt,不是C++语言内置的变量,而是自定义的变量,为struct变量
//a,b分别存放要相加的变量。    

 

    cin>>n;                                      //读取输入


    for

(i=1;i<n;++i){                         //i++和++i的不同
        cin>>a>>b;                          //读取等待要相加的
        c=a+b;                                 //将a,b相加
        cout<<"Case "<<i<<":"<<endl;                 //输出提示信息
        cout<<a<<" + "<<b<<" = "<<c<<endl<<endl;      // 输出计算的结果
    }

 

 

//为什么要多出下面这一块呢,为什么不直接放到循环里面。
    cin>>a>>b;
    c=a+b;
    cout<<"Case "<<i<<":"<<endl;
    cout<<a<<" + "<<b<<" = "<<c<<endl;
    return
0;
}


 

一、i++和++i的区别

*************

看下这句的汇编代码就知道了,i++由于需要保存之前的值,需要一个辅助存储空间。而++i直接用和覆盖原空间即可

***************

前++是先加再取值,后++是先取值再加。

也就是i=3时,i++和++i的结果都是让i=4,但i++的值是3,而且++i的值是4。

由于i++的值还是i的原来的值,所以要先保留原始值,这样理解:

j=i++解释为以下几条语句:
temp=i;
i=i+1;
j=temp;

而j=++i解释为:
i=i+1;
j=i;

如果只是简单类型没什么,但如果是类的话,temp的创造可是大代价的。这就是为什么很多人喜欢在循环中使用++i。

但在循环中,我们不关心其值,只关心其结果,所以是一样的。

 

二、为什么要在循环下面多出一段输出的语句。

如果不最后不单独列出输出的语句。

Presentation Error

 

三、为什么不直接相加,为什么需要使用大整数。

在32位操作系统上,整形数的长度是32位,即四个字节,对于一般的应用,这个长度的整数已经足够。
但是在某些领域,例如密码学中,经常需要用到长达128位(16字节)的整数,
对于这种整数,内部数据类型是无法处理的,因此需要自行实现这样的大整数类。并运用该类实现相关算法。
 

四、位,字节

B是Byte的意思,Byte是字节的意思,是存储空间的基本计量单
bit是的意思,是说二进制数的长度单,比如10011001就是8二进制数
这个bit就是网速的基本计量单bps里的b,bps的意思是bits per Second,即每秒传输多少数(二进制)
为什么这里是bits而不是bit了呢?这是英文与中文的区别,复数的表示法。
二进制数是计算机内部使用的基本表达语言,所以(bit)是计算机中最小的数据单
1字节在计算机里存储为一个8进制数,这是固定的。

提到了字节,不得不再提到“字”这个计量单:“字”由若干个字节构成,字的数叫做字长,字长就是说字所对应的二进制数的长度。不同的机器有不同的字长。例如一台8机,它的1个字就等于1个字节,字长为8。如果是一台16机,那么,它的1个字就由2个字节构成,字长为16
前期的DOS就是8的,后期的DOS是16的,Win9X是基于DOS的,所以也是16的,NT核心的Windows是32的,现在也有了64的XP/2003,CPU也有了64的,这个操作系统和CPU所说的就是bit的意思,即二进制数的长度。
字节是固定由8二进制构成,64系统就代表了64的二进制代表一个字,换算成字节就是64/8=8,即是说由8字节构成一个字,32系统就是32/8=4,4个字节代表一个字。

 

五、 ostream & operator <<

这一句是什么意思?什么概念? 

posted on 2011-10-10 14:33  海山  阅读(379)  评论(0)    收藏  举报