ACM 比大小

比大小

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
 
描述

给你两个很大的数,你能不能判断出他们两个数的大小呢?

比如123456789123456789要大于-123456

 
输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
如果a>b则输出“a>b”,如果a<b则输出“a<b”,如果相等则输出“a==b”。
样例输入
111111111111111111111111111 88888888888888888888
-1111111111111111111111111  22222222
0 0

#include <stdio.h>
#include <string.h>

int main()
{
    char a[1000],b[1000];
    int sa = 0;
    int sb = 0;
    int hit = 0;
    while(true)
    {
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        sa = sb = hit = 0;
        scanf("%s%s", a, b);
        if(*a == '0' && *b == '0')
            break;
        if(*a == '-')
            sa = 1;
        if(*b == '-')
            sb = 1;
        if(sa == 0 && sb == 1)
            hit = 1;
        else if(sa == 1 && sb == 0)
            hit = -1;
        else
        {
            int alen, blen, i = 0;
            alen = strlen(a) - sa;
            blen = strlen(b) - sb;
            if(alen > blen)
                hit = 1;
            else if(alen < blen)
                hit = -1;
            else if(alen == blen)
            {
                i = sa;
                hit = 0;
                while(i < alen + sa)
                {
                    if(a[i] < b[i])
                    {
                        hit = -1;
                        break;
                    }
                    else if(a[i] > b[i])
                    {
                        hit = 1;
                        break;
                    }
                    i++;
                }
                hit = hit * (sa > 0 ? -1:1);
            }
        }
        if(hit == 1)
            printf("a>b\n");
        else if(hit == -1)
            printf("a<b\n");
        else if(hit == 0)
            printf("a==b\n");
    }
    return 1;
}

 



posted @ 2015-06-09 21:00  sdlwlxf  阅读(359)  评论(0编辑  收藏  举报