2015-11-19 37 views
-3

因爲每個人,這是一個符合我的優先級的代碼,但主要的問題是他沒有按照我喜歡的方式編寫儘可能多的數字,但是,那麼,這是除以4. FE 4位數字,在點之後,8,12 16 20等在哪裏舉行?另一個問題是,如何讀取教科書中的所有符號,它只讀取一個數組。謝謝你的時間。平方根2.我做過C語言的一些錯誤

#include <malloc.h> 
#include <math.h> 
#include <cstdio> 
#include <cstring> 

long B=10000000; 
long LB=4; 

void SetToInteger (long n, long *x, long Integer) { 
    long i; 
    for (i=1; i<n; i++) x[i] = 0; 
    x[0] = Integer; 
} 

long IsZero (long n, long *x) { 
    long i; 
    for (i=0; i<n; i++) 
    if (x[i]) return 0; 
    return 1; 
} 

void Add (long n, long *x, long *y) { 
    long carry=0, i; 
    for (i=n-1; i>=0; i--) { 
    x[i] += y[i]+carry; 
    if (x[i]<B) carry = 0; 
    else { 
     carry = 1; 
     x[i] -= B; 
    } 
    } 
} 

void Mul (long n, long *x, long q) { 
    long carry = 0, xi, i; 
    for (i=n-1; i>=0; i--) { 
    xi = x[i]*q; 
    xi += carry; 
    if (xi>=B) { 
     carry = xi/B; 
     xi -= (carry*B); 
    } 
    else 
     carry = 0; 
    x[i] = xi; 
    } 
} 

void Div (long n, long *x, long d) { 
    long carry=0, xi, q, i; 
    for (i=0; i<n; i++) { 
    xi = x[i]+carry*B; 
    q  = xi/d; 
    carry = xi-q*d; 
    x[i] = q; 
    } 
} 

void Print (long n, long *x) { 
    long i; 
    printf ("%d.", x[0]); 
    for (i=1; i<n; i++) { 
    printf ("%.4d", x[i]); 
    if (i%25==0) printf ("%8d\n", i*4); 
    } 
    printf ("\n"); 
} 

int main() { 
    char co[5000]; 
    char sym[5000] = "symboliai.txt"; 
    FILE* f = fopen (sym, "r"); 
    for (int i=0; !feof(f); i++) 
    co[i] = fgetc(f); //1 symbol? (http://www.copypastecharacter.com/all-characters just deleted the numbers.) 
    printf("%s",co); 
    printf("digits?\n"); 
    int n=0; 
    scanf("%d",&n); 
    for (int a=0; a<strlen(co)-1;a++) 
     if((co[a]!=n|| n>=0)) 
{ 

long NbDigits=n, size=1+NbDigits/LB; 
    long *r2 = (long *)malloc(size*sizeof(long)); 
    long *uk = (long *)malloc(size*sizeof(long)); 
    long k=1; 

    SetToInteger (size, r2, 1); 
    SetToInteger (size, uk, 1); 
    while (!IsZero(size, uk)) { 
    Div (size, uk, 57122); 
    Div (size, uk, 2*k); 
    Mul (size, uk, 2*k-1); 
    Add (size, r2, uk); 
    k++; 
    } 
    Mul (size, r2, 239); 
    Div (size, r2, 169); 
    Print (size, r2); 
    free (r2); 
    free (uk);} 
    else 
     printf("skaicius neigiamas"); 
} 
+3

如果您有兩個不同的問題,則將其作爲兩個不同的問題發佈。 –

+4

至於* one *的問題,請嘗試學習如何使用調試器。然後你可以逐行瀏覽代碼,看看會發生什麼,而你可以看到所有變量的值是什麼。 –

回答

0

認爲你問(至少一個問題)是如何以更高的精度進行打印。

若要更改輸出到屏幕的小數點數,請將.4更改爲想要打印的許多小數點。之前在打印語句中的小數點後的數字告訴你多少個數字怎麼會之前,小數點:

printf ("%.4d", x[i]);

被警告後輸出雖然你只能打印多達小數點作爲價值實際上是存儲的,其餘的將是亂碼。

你也打印了一個整數類型值(長)後的小數點,這是毫無意義的。我不確定你想要用這個代碼做什麼,因此除了這個之外,我不確定在這裏提出什麼建議。嘗試雙打(%lf)?

+0

嘗試過這個問題不在這裏......如果你改變它,它會做一些質量翻倍的事情。 – Andrelis

+1

我真的很抱歉,但我不明白你在說什麼。它也看起來像你試圖打印一個整數(長)的小數位,這是沒有意義的。您能否編輯您的問題或評論或其他內容,並指定您正在使用的確切問題,最好是與特定的代碼行相關。 – Samidamaru