比大小&&分数加减法

本文介绍了如何对比两个数的大小,强调了通过相减判断大小的思路,并提供了代码实现。同时,文章探讨了分数加减法的重点,即先计算结果再转化为分数形式,尤其注意负数分数的处理。鼓励读者保持清晰的思维,相信自己的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比大小

时间限制: 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

思路:比大小的话,我觉得最简单的方法就是相减了吧!

拿a-b(但是这道题是大数)

如果结果小于0,那就是a小于b

如果结果大于0,那就是a大于b,

如果结果等于0,就是a=b, 但是我代码不是按照这个思路。。。因为是刚想起来的你们可以试试看

以下代码的思路是:

两个数比较大小无非是这几种情况:

1.都为负数 2.都为整数。3一正一负。

一正一负最好判断了,负的永远小于正的。

同号的情况的下

相比较数字的长度,当长度也一样的时候就逐个比较数字大小

只要有个明确的思路想法,做起来就不会乱。

#include<stdio.h>
#include<string.h>
#define M 1000
int main()
{
     char a[M],b[M];
     int la,lb;
     while(scanf("%s %s",a,b)&&strcmp(a,"0")&&strcmp(b,"0"))
     {
             if(a[0]=='-'&&b[0]!='-')
                    printf("a<b\n");
             else if(a[0]!='-'&&b[0]=='-')
                   printf("a>b\n");
             else
             {
                       la=strlen(a);
                      lb=strlen(b);
                  if(a[0]=='-'&&b[0]=='-')
                     {
                         if(la<lb)
                            printf("a>b\n");
                      else if(la>lb)
                           printf("a<b\n");
                       else
                       {
                        if(strcmp(a,b)==1)
                                  printf("a<b\n");
                         else if(strcmp(a,b)==0)
                                  printf("a==b\n");
                        else
                                  printf("a>b\n");
                        }

                   }
             else
                {
                      if(la<lb)
                          printf("a<b\n");
                      else if(la>lb)
                           printf("a>b\n");
                    else
                  {
                          if(strcmp(a,b)==1)
                                    printf("a>b\n");
                          else if(strcmp(a,b)==0)
                                     printf("a==b\n");
                           else
                                  printf("a<b\n");
                   }
             }


       }
  }
     return 0;
} 


那我把思路都写出来了就不用注释了吧。

分数加减法

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 2
描述
编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据 
每行数据是一个字符串,格式是"a/boc/d"。 
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 

数据以EOF结束 
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。 
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/8
1/4-1/2
1/3-1/3
样例输出
1/2
-1/4
0
这种题让我们自己算的话完全就是个智障的题!

但是要打成代码!天哪想到化简和判断头都要大了,这个时候想到这就要拐回来了,不能这样想下去千万别按照这样的思路敲,这样特别容易乱

首先先用计算出分式的结果,再把结果转化成分数形式就是这道题的核心思想了;

其次就是在转化这一块了,一定要转化成浮点型的

因为有负数的分数,所以当计算结果为负的时候,计算还是和正数的计算方法,不同的就是前面多了个符号-,所以只需要在结果前面添加一个符号就行了。


#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
   int a,b,c,d,i,j;
   char op;
   while(~scanf("%d/%d",&a,&b))
   {
   	    float res,t;
   	    res=0.0;
	    t=0.0;
   	    int flag=0;
   	    op=getchar();
   	    scanf("%d/%d",&c,&d);
   	    if(op=='+')
   	   res=1.0*a/b+1.0*c/d;
   	    else
   	    res=1.0*a/b-1.0*c/d;
   	if(res>=0)
   	{
   		if(res==0)
   		{
		   printf("0\n");
		  
   		}
   		else
   		{
   			for(i=1;i<=18;i++)
   			{
   				if(flag)
				   break;
				   for(j=1;j<=18;j++)
				   {
				   	t=1.0*i/j;
				   	if(res==t)
				   	{
				   	   flag=1;
				   	   if(i%j==0)
				   	   	printf("%d\n",i/j); 
				   	   else
				   	   printf("%d/%d\n",i,j);
				   	   
				   	}
				   } 
   			}
   		}
   	}
   	else
   	{ 
	   res=fabs(res);
   		for(i=1;i<=18;i++)
   		{
   			if(flag)
   			break;
   			for(j=1;j<=19;j++)
   			{
   				t=1.0*i/j;
   				if(res==t)
   				{
   					flag=1;
   					if(i%j==0)
   						printf("-%d\n",i/j);
   					else   					
   						printf("-%d/%d\n",i,j);   					
   					
   				}
   			}
   		}
   	}
   }
	return 0;
}







相信自己。

你想要的都会有~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值