2012-07-24 175 views
2

我剛剛開始搞GMP,我似乎無法讓數字正確打印。這是我想要的:GMP gmp_printf()

#include <stdio.h> 
#include <stdlib.h> 
#include "gmp.h" 
int main(){ 
    mpz_t n; 
    mpz_init (n); 
    mpz_set_ui(n, 2); 

    gmp_printf("attempt 1: %d \n", n); 
    gmp_printf("attempt 2: %Z \n", n); 

    return 0; 
} 

我知道這一定很簡單......但我只是沒有看到它。

我的輸出是:

attempt 1: 1606416528 
attempt 2: Z 

我想我可能只是使用mpz_set_ui錯...

編輯:

%ZD的作品我也試過%的正我本以爲這工作,但不......在這方面肯定需要一些幫助。

+0

* mpz_t *是什麼類型?是一個結構,一個聯合,一個簡單的typedef到一個整數? – 2012-07-24 11:51:16

+0

@ A.G。 - 它是GMP宣佈的一種不透明類型。這個想法是,人們永遠不需要知道它的內部。它應該表示一個任意的精度整數(即可以比機器的ISA本身支持的寬度大很多) – ArjunShankar 2012-07-24 11:59:36

回答

7

使用mpz_set_ui沒錯。

gmp_printf("attempt 1: %d \n", n); 
gmp_printf("attempt 2: %Z \n", n); 

以上兩者不工作,因爲它應該實際上是:

gmp_printf("attempt 3: %Zd \n", n); 

,因爲這是怎麼gmp_printf需要它。

在GMP here中對格式化輸出字符串有一個比較完整的處理。

+0

太棒了!謝謝 – Zevan 2012-07-24 13:05:29