問題はこちら
No.293 4>7の世界 - yukicoder
上位から見ていって、一致しなくなったところを比べれば良い
int main(){ int p=1000000000,x,y,a,b; scanf("%d%d",&a,&b); do{ x=a/p%10; y=b/p%10; //これでx,yにはa,bの上から何桁目かが入る p/=10; }while(x==y); //xとyが等しくなくなったら小さい方を出力 if((x<y&&(x!=4&&y!=7))||(x==7&&y==4))printf("%d",b); else printf("%d",a); return 0; }
出力の条件分岐は「x<yならb、ただし(x,y)が順不同で(4,7)のときは逆」であり、またx,yは1桁であることを利用すると、x<y^(x*y==28) と書ける。
p=1e9;x,y;main(a,b){for(scanf("%d%d",&a,&b);x==y;p/=10)y=b/p%10,x=a/p%10;x=!printf("%d",x<y^x*y==28?b:a);}
106B