大整数的存储

定义int型数组d[1000],整数的高位存储在数组的高位,整数的低位存储在数组的低位。
而把整数按字符串读入的时候,实际上是逆序存储的 。因此在读入之后需要另存到d[]数组的时候需要反转一下。

定义大数 数据类型 bign:

struct bign{

    int d[1000];
    int len;

    bign()
    {
        fill(d,d+1000,0);
        len=0;
    }

};

输入大整数的时候,一般都是先用字符串读入,然后再把字符串另存为bign结构体。由于使用char数组进行读入时,整数的高位会变成数组的低位,而整数的低位会变成数组的高位,因此为了让整数再bign中是顺位存储,需要让字符串倒着赋给d[]数组。

//将整数转换为bign 

bign change(char str[])
{
    bign a;

    //bign的长度就是字符串的长度 
    a.len=strlen(str); 

    for(int i=0;i<len;i++)
    {
        //逆着赋值 
        a.d[i] = str[a.len- i-1]-'0';

    }

    return a; 

}


如何比较两个bign类型的变量的大小呢?先判断两者的len的大小,如果不相等,就是长的大;如果相等,则从高位到低位进行比较,直到出现某一位不等 ,就可以判断两个数的大小。

 //比较a和b的大小,a大、相等、a小分别返回1、0、-1 

int compare(bign a,bign b)
{
    if(a.len > b.len)
    {
        return 1;//a大 
    }
    else if( a.len < b.len )
    {
        return -1;//a小 
    }
    else
    {
        //从高位往低位比较 
        for(int i= a.len-1;i>=0;i-- )
        {
            if( a.d[i]>b.d[i] )
            {
                return  1; //a大 
            }
            else if( a.d[i]<b.d[i]   )
            {
                return -1;//a小 
            }

        }

        return 0;   //两数相等 

    }




}