2016-04-11 31 views
-1

Tam sayılarla basit bir bölümleme yapmaya çalışıyorum. Bir dizi çıkarma kullanarak ve aynı zamanda özyinelemeyi kullanmaya çalışıyorum. Sadece toplama ve çıkarma işlemlerini kullanabilen bir bilgisayar kullanmayı hayal edin. Bir çarpma ve üstel yarattım, ama bölünmeyle en zor zamanları yaşıyorum. Herhangi bir yardım veya tavsiye uzun bir yol olacak!Bölüm için Rutin

#include<stdio.h> 

int DIV(int m, int n){ 
    if(m == 0){ 
     return 0; 
    } 
    else if(n == 0){ 
     return -1; 
    } 
    else if(n == 1){ 
     return m; 
    } 
    else if(m > 0 && n > 0) 
     return DIV(m, n-1) - m; 
} //exit 

Bu benim kodum şu ana kadar, yalnızca bitiş ifadesinde yardıma ihtiyacım var. Ayrıca int m, pay ve n paydadır. Bu arada GNU C kullanıyorum.

else if (m < n) 
    return 0; 
else 
    return 1 + DIV (m-n, n); 

Ama bu kodun gerçekten sınırlı kaynaklarla bir makinede çalıştırmak istiyorsanız, bir süre döngü olarak uygulamalıdır:

+0

Ve sorun şu ki ...? Crash? Yanlış sonuç? ...? İkinciyse, bazı değer örneklerini gösterin. Ve "GNU C" bir dil değil. – deviantfan

+0

Teknik olarak, 0/0 hala tanımlanmamış, bu sorunun bir parçası değil ama eğer ilk önce eğer eğer, eğer payda 0 olursa, cevabınız her zaman tanımsız ise, ikincisini hareket ettirmelisiniz. – Stephen

+0

eğer neye geri dönmek istersen bölünemez değil mi? ondalık kısmı varmış gibi. Ayrıca, m'den n'yi çıkararak ve sıfıra ulaşana kadar kaç kez çıkardığınızı saymak, toplama ve çıkarma işlemi dışında kullanmanıza izin verilmeyen tek yol olacaktır. –

cevap

1

Sen istiyorsun. Belki de (hata denetimi ve negatif sayı işleme atlandı):

int div (int num, int den) 
{ 
    int ret = 0; 
    while (num > den) 
    { 
     num -= den; 
     ret++; 
    } 
    return ret; 
}