2014-12-26 160 views
-3

給出一個整數N.找到這個數字中的數字,正好除以N我的代碼給了我一個超時消息,即由於超時或CPU而終止超過時限(核心轉儲)。這裏是我的代碼enter code here如何將數組轉換爲long int並返回到數組

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() 
{ 

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
    int T, cnt, digits1, digits2, rem; 
    long long x; 
    char N[11]; 

    scanf("%d", &T); 

    for (int i = 1; i <= T; i++) 
    { 
     scanf("%10c", N); 
     int x = (atoll(N)); 
     digits1 = x; 
     while (digits1 != 0) 
     { 
      digits1 = x/10; 
      cnt++; 
     } 
     // char buffer[cnt + 1]; 
     for(int j = 1; j <= cnt; j++) 
     { 
      rem = x % N[j]; 
      if (rem == 0) 
      { 
       digits2++;  
      } 
     }    
     printf("%d", digits2); 
    } 
    return 0; 
} 
+1

你嘗試調試程序?幫助中心中的鏈接:[如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 – usr2564301

+0

digits1永遠不會變爲零,使第一個內部循環無限。你不能被零除,因此,除以兩個數字將永遠不會等於零。顯然,如果「x」小於10,digits1應該爲零。 – superultranova

+1

你應該編譯你的程序並啓用警告(並且已經執行)。 'x'被聲明瞭兩次,即使你的編譯器允許在範圍內使用,在同一個函數中有兩個不同的同名變量是不好的。有未初始化的變量,你也應該研究'scanf()'用'%c'類型做什麼 - 它不會填充數組。 –

回答

0

這看起來像家庭作業。

我會給點建議。如果你打算做這樣的事情,那麼你可能會尤其是在基地10 -

一旦你有了轉化爲實際intlong(或你的情況long long)輸入字符,不要耍弄各地的數字以及在char數組形式。此位不是必需的:

while (digits1 != 0) 
{ 
    digits1 = x/10; 
    cnt++; 
} 

您有未初始化的值。不要以爲一切都會自動初始化爲零。有時候你很幸運......但通常你不會。

這看起來不錯:

for(int j = 1; j <= cnt; j++) 
{ 
    rem = x % N[j]; //not quite right N is ASCII 
    if (rem == 0) 
    { 
     digits2++;  
    } 
} 
相關問題