C語言的程式...想把陣列中的數字靠右顯示...

以C語言寫的程式...列出1!至53!..

把數字每四位放到一個陣列...

想把陣列中的數字靠右顯示...

但....不知道怎樣把前面的0消去...而數值中的0不變....

麻煩了....謝謝...

#include <stdio.h>

void set_value(int a[][18]);

void calculation_of_factorial(int a[][18], int k);

void print_value(int a[][18], int k);

int main(void)

{

int e[54][18];

set_value(e);

calculation_of_factorial(e, 53);

print_value(e, 53);

return 0;

}

void set_value(int a[][18])

{

int j;

a[0][0] = 1;

for(j=1;j<18;j++)

a[0][j] = 0;

}

void calculation_of_factorial(int a[][18], int k)

{

int i,j;

for(i=1;i<k+1;i++){

a[i][0] = a[i-1][0]*i%10000;

for(j=0;j<18;j++){

a[i][j] = a[i-1][j]*i%10000 + a[i-1][j-1]*i/10000;

}

}}

void print_value(int a[][18], int k)

{

int i,j;

for(i=1;i<k+1;i++){

printf("%02d! = ",i);

for(j=17;j>0;j--){

printf("%04d",a[i][j]);

}

printf("%04d\n",a[i][0]);

}

}

Update:

Allen:

如果把 %04d換成 %4d...

那陣列中4位數的千位是0 但前一個陣列是有數值的.....結果就會有誤...

2 Answers

Rating
  • ?
    Lv 5
    1 decade ago
    Favorite Answer

    可修改 print_value() 為如下 :

    void print_value(int a[][18], int k)

    {

    int i,j,f;

    char *fmt[] = { " ", "%4d", "%04d" };

    for(i=1;i<k+1;i++){

    printf("%02d! = ",i);

    for(j=17,f=0;j>=0;j--){

    if (a[i][j]!=0 && f<2) f++;

    printf(fmt[f], a[i][j]);

    }

    printf("\n");

    }

    }

    當前面值都為0時顯示4個空白, 第一次非0用%4d, 之後的用%04d; fmt 即為這三種格式. 而 f=0 與 if (a[i][j]!=0 && f<2) f++; 即是處理格式的變換. 若 if 敘述 想要寫的嚴謹些, 可寫成...

    if ((a[i][j]!=0 || f==1) && f<2) f++;

    確保%4d只用一次, 不過這 在此程式使用上是派不上用場的..

    2009-05-28 13:32:00 補充:

    char *fmt[] = { " ", "%4d", "%04d" };

    若寫成 fmt[][] <-- 編譯不過,至少須指明第二維 如 fmt[][5]

    所以為省的自己算第二維值(至少須取字串中長度最長者再加1), 所以用成一維陣列指標的方式, 交給編譯器算那些字串長度囉... 而雖然是陣列指標, 但程式中還是能當成二維陣列的方式來使用. 取f位置的字串指標 == fmt[f] == *(fmt+f) == &fmt[f][0]

  • Allen
    Lv 4
    1 decade ago

    %04d換成%4d

Still have questions? Get your answers by asking now.