這是我解碼的簽名代碼:這個代碼的逆向過程?
#include<stdio.h>
int i;
double q[]={6627601.1454013166};
int main()
{
if(1000.0-i++)
{
main();
}
else
{
puts(q);
}
}
因爲我用C能否請你解釋一下什麼是在代碼完全發生[除了遞歸]初學者?
現在,我想知道如果我想創建一個類似的程序來打印我的名字,那麼生成數字的過程是什麼? 我試過如下: CODE1:
#include<stdio.h>
int main()
{
double a;
scanf("%s",&a);
printf("%lf\n",a);
}
CODE2:
#include<stdio.h>
int i;
double q[]={31711421078673377979858439824814601270188287470225555299667257024608266243979287542515985597401536215834733576192.000000};
int main()
{
if(1000.0-i++)
{
main();
}
else
{
puts(q);
}
}
爲什麼第二個代碼給僅輸出第8個字符? [如果我給輸入多達7個字符,它給輸出0.000000和多於8,它給出與8相同的輸出]
對於某些輸入,它只生成13位數字,對於某些輸入119位數字! #@#@ ???。
如何將這個龐大的數字減少到15-20位?
我怎樣才能得到你的特殊號碼的最後4位數[因爲我已經得到了前13位]?
你的代碼使用浮點類型,就好像它們是字符串一樣 - 壞事情將會發生。你不能直接調用'3.14'來得到「3.14」。在你將一個字符串掃描成雙精度的情況下,你需要核心轉儲。 – mah
你不想去那裏......然而。嚴重的是,這會產生許多關於變量存儲,內存佈局和浮點表示的細節。作爲初學者,你最好學習好的編碼實踐,而不是搞清楚如何濫用語言。 – AShelly
值得一提的是,當您以十六進制格式查看IEEE幻數表示形式時,會得到0x41594844494E4153。當你從LSB開始,並將每個字節看作ascii時,你會得到SANIDHYA。 8個字符的限制是由於double是8個字節。我認爲主要的遞歸是錯誤的。遞歸在堆棧溢出之前結束並且名稱後面沒有多餘字符的事實是編譯器的具體實現細節,並可能在任意系統上失敗。 – AShelly