第一个是不对的,应该是m%i==0&&n%i==0&&(s = i);打印 s,否则 最终 i 为m, n中较小的那个数.如果非要少一个变量,下面的版本是可以的:int i = m > n ? n : m;for( ; i > 1; i--) m%i == 0 && n%i == 0 && (m = i) && (i = 1);return m;这未免也太自由了,难以接受