看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《NoirCat (Noir)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : VC++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : gmp.lib gmpDebug.lib : 問題(Question): : 想要輸入一任意長度整數後做Miller-Rabin : 並且在輸入到字元時顯示輸入錯誤7 : 程式碼(Code):(請善用置底文網頁, 記得排版) : mpz_t n, x; : mpz_init(x); : printf("Test Number:"); : gmp_scanf("%s",&x); : mpz_init_set_str(n, x, 10); : //接著使用n進行Miller-Rabin : 補充說明(Supplement): : 輸入字串可以成功存入x : 但在mpz_init_set_str執行後只有前20位可以設入n : 且執行後將x印出會變成20位數字+1符號 : 要如何使所有輸入數字皆設入n呢? 你的函式根本就完全用錯了吧?應該根本就編不過才對...(?) 你應該去看看gmp的documentation,上面寫得很清楚 用gmp要讓使用者輸入數字,然後存入mp[zqf]_t有兩種方法: 1. 直接call gmp_scanf(const char* fmt, ...): #include <gmp.h> int main() { mpz_t z; mpz_init(z); gmp_scanf("%Zd", z); // %Z for mpz_t, %Q for mpq_t, %F for mpf_t // Note that we don't pass the address of z. // miller_rabin(z, k); return 0; } 2. 先讀入一個NULL-terminated字串,然後用mp[zf]_init_set_str()初始化它: #include <stdio.h> #include <gmp.h> int main() { char buf[256]; scanf("%255s", buf); mpz_t z; mpz_init_set_str(z, buf, 10); // Initialization and assignment. // miller_rabin(z, k); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.252.42
meconin:Compile 應該會過吧?沒有不符合 Syntax 01/16 18:05
不好意思,如果是當作C編譯的話是的確會只會產生warning: error: passing argument 2 of `__gmpz_init_set_str' from incompatible pointer type [-Werror] note: expected `const char *' but argument is of type `struct __mpz_struct *' 不過如果是當C++編譯的話就會直接變成error了(我原本是這樣做的...): error: cannot convert `__mpz_struct*' to `const char*' for argument `2' to `int __gmpz_init_set_str(mpz_ptr, const char*, int)' 不過無論如何,原本的code本身就大有問題,就算編得過跑了也會爛掉... ※ 編輯: PkmX 來自: 140.113.252.42 (01/16 23:50)