比大小
时间限制:
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
-
每组测试数据占一行,输入两个不超过1000位的10进制整数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;
}
相信自己。
你想要的都会有~