比大小
时间限制:
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
-
-
题解:大数的比较,用字符串知识
-
(1)按正负分四种情况
-
(2)符号相同 用strcmp进行比较(前不久才真正理解strcmp的用法)
-
-
题目开始这也不难,但是在if else用法上卡了一大会儿,嗯,if else必须成对出现,或者只用if 。
-
<span style="white-space:pre"> </span>if(strcmp(a,b)>0)//if else 用法1 printf("a<b\n"); if(strcmp(a,b)<0) printf("a>b\n"); else printf("a==b\n");
-
这样就是错的,<span style="font-family: Tahoma, Arial, sans-serif, simsun;">第二个if 和else 是成对的 所以又判断了一次,输入2 1,会有两个结果 a>b a==b</span>
-
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char a[1010],b[1010]; while(~scanf("%s%s",a,b)) { int la=strlen(a); int lb=strlen(b); if(a[0]=='0'&&b[0]=='0') return 0; if(a[0]=='-'&&b[0]!='-') printf("a<b\n"); if(a[0]!='-'&&b[0]=='-') printf("a>b\n"); if(a[0]=='-'&&b[0]=='-') { if(la>lb) printf("a<b\n"); if(la<lb) printf("a>b\n"); if(la==lb) { if(strcmp(a,b)>0)//if else 用法1 printf("a<b\n"); if(strcmp(a,b)<0) printf("a>b\n"); if(strcmp(a,b)==0) printf("a==b\n"); } } if(a[0]!='-'&&b[0]!='-')//条件判断的时候马虎出错了!!! { if(la>lb) printf("a>b\n"); if(la<lb) printf("a<b\n"); if(la==lb) { if(strcmp(a,b)>0)//if else 用法2 printf("a>b\n"); else if(strcmp(a,b)<0) printf("a<b\n"); else (strcmp(a,b)==0) printf("a==b\n"); } } } return 0; }
-
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b