質問: %d",a); if (b != 1) printf("/%d\n",b); else printf("\n"); return 0; } これをどのように修正すれば、正確な答えが出るのでしょうか? 教えてください。
回答: #include #include #define rev 0x80000000 int main ( void ) { int a,b; int k,min,max,sign; char sign_ch; do{ printf("a=?");scanf("%d",&a); printf("b=?");scanf("%d",&b); }while(!(a&b)); sign=(a&rev)|(b&rev)?-1:1; a*=((a&rev)&&!(b&rev))?1:sign,b*=(b&rev)?-1:1; if (abs(a)>abs(b)) min=b,max=abs(a); else min=abs(a),max=b; for ( k=2 ; k<=min ; k++){ while (!(a%k||b%k)){ a/=k; b/=k; printf("%d/%d,%d\r\n",a,b,k); } } sign_ch=a&rev?'-':' '; printf("a/b = %c%d",sign_ch,abs(a)); if (abs(b) != 1) printf("/%d\n",abs(b)); else printf("\n"); return 0; } こんな感じでしょうか...。