2015-10-18 26 views
0

要發佈整個代碼,所以如果有別的東西可以幫助我。 該方案的想法是要知道,如果插入的數字是5的倍數,10的權力或完美的廣場(我不是英語,有點不確定這個詞是我正在尋找的)。是否可以使用%和double?如果不是我能做什麼?

int main (void){ 

    int i,b=0,rqi; 
    printf("Insert a number from 1 to 10000: "); 
    scanf("%d",i); 
    double rq=sqrt(i),p=log(i); 

    if(i%5==0){ 
     printf("It's a multiple of 5\n"); 
     b=1; 
    } 

    if(p%1==0){ 
     int pi=p; 
     printf("It's a power of 10 (%d=10^%d)\n",i,pi); 
     b=1; 
    } 

    if(rq%1.0==0){ 
     rqi=rq; 
     printf("It's a perfect square (%d = %d*%d)\n",i,rqi,rqi); 
    } 

    if(b==0){ 
     printf("It doesn't satisfies any condition.\n"); 
    } 


    return 0; 
} 

我得到的錯誤是

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=] 
    scanf("%d",i); 
^

error: invalid operands to binary % (have ‘double’ and ‘int’) 
    if(p%1==0) 
    ^

invalid operands to binary % (have ‘double’ and ‘double’) 
    if(rq%1.0==0) 

而且,我學到了位的Java,而不是C,有沒有一種方法,使一個布爾值或者使一個int 0或1的去哪裏?這樣int .WRITE的

回答

4
scanf("%d",i); 

通地址 -

scanf("%d",&i); 

%運營商不能在doublefloat使用。剩餘部分只關心整數值。

使用fmod功能爲上述任務獲得餘數。

這樣你就可以做到這一點,在其納入您的if條件 -

fmod(p,1.0) // gives remainder of p divided by 1.0 

但可能不使用==比較double值。

+0

爲什麼downvote?請讓我知道原因。 – ameyCU

+0

得到使用,奇怪的事情發生在這裏:)。 – Michi

1

好像你應該檢查fmod函數。

此外,如果您想檢查double是否爲整數範圍,您可以使用floor函數檢查它的值是否等於它的樓層值。

if(double_num == floor(double_num)) return 1; 
else return 0; 
1

你基本上是在處理這裏的整數。浮點運算有其不準確性;相反,用整數進行比較可能會更好。

int is_square(unsigned int x) 
{ 
    int r = sqrt(x) + 0.5; 

    return (r*r == x); 
} 

這裏,首先計算(粗略地)舍入的整數根。然後你檢查一下,是否將它打回原來的數字。

int is_power10(unsigned int x) 
{ 
    while (x && x % 10 == 0) x /= 10; 

    return (x == 1); 
} 

剝離尾隨零。如果剩下的是1,那麼你的功率爲10。

相關問題