大整数的存储

大整数的存储

定义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;   //两数相等 

    }




}


全部评论

相关推荐

12-18 22:04
已编辑
杭州电子科技大学 Java
程序员牛肉:我觉得是这样的,你现在有点病急乱投医了。你要问自己这样一个问题: 我找实习的目的是什么?为了挣钱还是增强个人实力?如果是为了挣钱那没得说,如果我是为了增强个人实习,那我异地去一个小厂实习真的有收益吗?这个收益是否大过我参加学校的项目或者自学?我记得你们杭电有那种实验室专门负责运维学校的项目的。 找实习只是一个手段而已,不要把他变成目的。不要病急乱投医。
实习简历求拷打
点赞 评论 收藏
分享
12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务