• 比大小


    比大小

    时间限制: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
    例子输出
    a>b
    a<b

    解题思路:

    因为数字位数太多无法用一个数值型的变量去保存下来,就想到用字符来进行推断,详细分支见代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MAX 1000
    char a[MAX+1],b[MAX+1];//以字符型存储数字a,b
    int main()
    {
    	int len_a,len_b,i,j;
    	while(scanf("%s %s",a,b))
    	{
    		len_a = strlen(a);
    		len_b = strlen(b);
    		if(len_a == 1 && len_b == 1 && a[0] == '0' && b[0] == '0')
    			exit(0);//若果该字符串长度为1,而且为字符0,则程序退出
    		else if(a[0] != '-' && b[0] == '-')//若果a为正数,b为负数,a肯定大于b
    			printf("a>b
    ");
    		else if(a[0] == '-' && b[0] != '-')//假设a为负数,b为正数,a肯定小于b
    			printf("a<b
    ");
    		else if(a[0] == '-' && b[0] == '-')//a,b同一时候为负数
    		{
    			if(len_a < len_b)//a的位数比b的位数小,则a大
    				printf("a>b
    ");
    			else if(len_a > len_b)//a的位数比b的位数大,则a小
    				printf("a<b
    ");
    			else//a,b的位数同样
    			{
    				for(i = 1; i < len_a; i ++)//从a,b的第1位数字開始比較,下标为1,第一位为符号位
    				{
    					if(a[i] < b[i]){
    						printf("a>b
    ");
    						break;}
    					else if(a[i] > b[i]){
    						printf("a<b
    ");
    						break;}
    				}
    				if(i == len_a)
    					printf("a==b
    ");
    			}
    		}
    		else//a,b同一时候为正数
    		{
    			if(len_a > len_b)
    				printf("a>b
    ");
    			else if(len_a < len_b)
    				printf("a<b
    ");
    			else//a,b位数同样
    			{
    				for(j = 1; j < len_a; j ++)
    				{
    					if(a[j] > b[j]){
    						printf("a>b
    ");
    						break;}
    					else if(a[j] < b[j]){
    						printf("a<b
    ");
    						break;}
    				}
    				if(j == len_a)
    					printf("a==b
    ");
    			}
    		}
    	}
    	return 0;
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    HDU
    01字典树模板
    扩展欧几里得和乘法逆元
    HDOJ-1156 Brownie Points II 线段树/树状数组(模板)
    CF-825E Minimal Labels 反向拓扑排序
    CF-831D Office Keys 思维题
    RMQ 解决区间查询问题
    hdu 5073 有坑+方差贪心
    hdu 5074 相邻数和最大dp
    hdu 5078 水题
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4680137.html
Copyright © 2020-2023  润新知