nyoj 1072 : 比大小(大数相减)
题目描述
给你两个很大的数,你能不能判断出他们两个数的大小呢?
比如123456789123456789要大于-123456
输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
-1111111111111111111111111 22222222
给你两个很大的数,你能不能判断出他们两个数的大小呢?
比如123456789123456789要大于-123456
输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
如果a>b则输出“a>b”,如果a
样例输入
111111111111111111111111111 88888888888888888888-1111111111111111111111111 22222222
0 0
样例输出
a>b
a
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char s1[10000]; char s2[10000]; int a[10000]; int b[10000]; int c[10000]; int main() { while(~scanf("%s%s",s1,s2)) { if(s1[0]=='0'&&s2[0]=='0') break; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); int l=0,k=0,flag=0; if(s1[0]=='-'&&s2[0]!='-') { printf("a<b\n"); continue; } else if(s1[0]!='-'&&s2[0]=='-') { printf("a>b\n"); continue; } else if(s1[0]=='-'&&s2[0]=='-') { for(int i=strlen(s1);i>=1;i--) { a[l++]=s1[i]-'0'; } for(int i=strlen(s2);i>=1;i--) b[k++]=s2[i]-'0'; flag=1; } else { for(int i=strlen(s1);i>=0;i--) { a[l++]=s1[i]-'0'; } for(int i=strlen(s2);i>=0;i--) b[k++]=s2[i]-'0'; } l=max(l,k); int m=0; for(int i=0;i<=l;i++) { c[i]=a[i]-b[i]-m; if(c[i]<0&&c[i+1]>0) { c[i]=c[i]+10; m=1; } else { c[i]=c[i]; m=0; } } int x=0; for(int i=l;i>=0;i--) { if(c[i]!=0) { x=i; break; } } if(x==0&&c[x]==0) printf("a==b\n"); else if((c[x]<0&&flag==1)||(c[x]>0&&flag==0)) { printf("a>b\n"); } else if((c[x]<0&&flag==0)||(c[x]>0&&flag==1)) { printf("a<b\n"); } } }