2015-06-21 38 views
0
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() { 
    long long int a[10^9],sum=0; 
    int n,i,length; 
    scanf("%d",&n); 

    for(i=0;i<n;i++) 
    { 
     if(0<=a[i]<=10^10) 
     { 
     scanf("%lld",&a[i]); 
     } 
    } 

    for(i=0;i<n;i++) 
    { 
     sum=sum+a[i]; 
    } 

    printf("%lld",sum); 
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */  
    return 0; 
} 

我不知道爲什麼我收到segentation故障時該代碼的原因運行正常此輸入1000000001 1000000002 1000000003 1000000004 1000000005如何使用長長整型和去除分段錯誤

+7

''^在C XOR運算,而不是指數運算符。 – samgak

+2

'10^9 == 3'; '10^10 == 0'。 '0 <= a [i] <= 10^10'是合法的,但它不會做你認爲它的做法。它相當於'(0 <= a [i])<= 10^10'。 '(0 <= a [i])'產生'0'或'1';該值然後與'10^10'比較,即'0'。 –

+3

@KeithThompson'^'的優先級低於<=',所以'<= 10^10'應該改爲'<=(10^10)'。 –

回答

4

問題在你的代碼:

  • 0<=a[i]<=10^10是不正確的,應該改爲0<=a[i] && a[i]<=(10^10)
  • ^是按位異或,不通電,
  • 在你的for循環中,你總是比較a[]的讀元素,所以你需要先讀,然後比較。
  • 使用unsigned long long,最後不需要int

檢查這個代碼:

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

#define MAX_NUM 1000000000ULL 
#define MIN_NUM 0ULL 

int main() { 
    int n,i; 
    printf("input number count: "); 
    scanf("%d",&n); 
    unsigned long long a[n],sum=0; 

    for(i=0;i<n;i++) { 
     printf("input number[%d]: ", i); 
     scanf("%llu",&a[i]); 
     if(a[i]<MIN_NUM || a[i]>MAX_NUM) { 
      a[i] = 0; 
      printf("\t(ignored, due to out of range [%llu, %llu])\n", MIN_NUM, MAX_NUM); 
     } 
    } 

    for(i=0;i<n;i++) { 
     sum+=a[i]; 
    } 

    printf("\nsum: %llu\n",sum); 
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */  
    return 0; 
}