當前位置:首頁 » 編程軟體 » 數字反轉編譯

數字反轉編譯

發布時間: 2022-02-25 11:40:30

java題目

J2EE Java2平台企業版
string是引用數據類型
如何取得年月日,小時分秒
public static void main(String[] args)
{
ActionListener time = new ActionListener() { // 監聽事件,不然實現不了動態改變時間
public void actionPerformed(ActionEvent e) {
//date對象代表當前的系統時間(毫秒)
Date date = new Date();
//format對象是用來以指定的時間格式格式化時間的
SimpleDateFormat from = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //這里的格式可以自己設置
//format()方法是用來格式化時間的方法
String times = from.format(date);
System.out.println(times); }
};
Timer tim = new Timer(1000, time); //這里表示1000毫秒更新一下時間
tim.start(); //啟動
}

我這個答案肯定正確啊
下面幫你解釋你的答案吧
Date //是在java.util.Date;裡面
SimpleDateForma //這個是java.text.SimpleDateFormat;用來輸出問本格式的
DateFormat //應該是在java.util.*;裡面吧..應該是的

你那個錯誤是編譯就沒通過啊
public class Test
那你那個編譯寫的因該是
javac Test.java 編譯的應該是類啊而不是javac time.java 請問你的time什麼意思呢,所以你報的異常是找不到time類啊
呵呵...你是初學java吧該答的我都答完了拉!還特地幫你每句都寫

如何讀寫文件
StringBuffer sb = new StringBuffer();
//File file = new FileWindow().load();
File file;
file = new File("F:/jtest/from.txt");
TextReader tr = new TextReader(file);
sb.append(tr.readAll());
Out.println(sb.toString());
String [] tags = {"\"", " ", "'"};
String str;
str = sb.toString();
for(String reg: tags) {
Out.println(reg);

str = str.replaceAll(reg, "");
}
Out.println(str);
抽象類和介面的區別
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
主鍵是確定資料庫中的表的記錄的唯一標識欄位,可以是表中的一個欄位,也可以是表中的多個欄位組成的。一旦確定為主鍵,則該欄位不可為空也不可以重復。比如學生表中的學號就可以定義成該表的欄位
外鍵的定義是相對於主鍵而言的,比如另有一張成績表,表中也出現了學生表中的對應學號欄位,則相對於學生表,學號就是成績表的外鍵
String和StringBuffer的區別
STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
try{}catch(){}finally{}結構,try{}內出現異常,try{}內剩下尚未執行的代碼還執行嗎,finally{}內的代碼呢?finally{}後面的代碼呢
執行 finally{}內的代碼最後執行
排序演算法

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

分類

在計算機科學所使用的排序演算法通常被分類為:

計算的復雜度(最差、平均、和最好表現),依據串列(list)的大小(n)。一般而言,好的表現是O。(n log n),且壞的行為是Ω(n2)。對於一個排序理想的表現是O(n)。僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要Ω(n log n)。

記憶體使用量(以及其他電腦資源的使用)

穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。也就是一個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄R和S,且在原本的串列中R出現在S之前,在排序過的串列中R也將會是在S之前。

一般的方法:插入、交換、選擇、合並等等。交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。

當相等的元素是無法分辨的,比如像是整數,穩定度並不是一個問題。然而,假設以下的數對將要以他們的第一個數字來排序。

(4, 1) (3, 1) (3, 7) (5, 6)

在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有:

(3, 1) (3, 7) (4, 1) (5, 6) (維持次序)

(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)

不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地時作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。

排列演算法列表

在這個表格中,n是要被排序的紀錄數量以及k是不同鍵值的數量。

穩定的

冒泡排序(bubble sort) — O(n2)

雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)

插入排序 (insertion sort)— O(n2)

桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體

計數排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體

歸並排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體

原地歸並排序 — O(n2)

二叉樹排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體

鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體

基數排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體

Gnome sort — O(n2)

Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體

不穩定

選擇排序 (selection sort)— O(n2)

希爾排序 (shell sort)— O(n log n) 如果使用最佳的現在版本

Comb sort — O(n log n)

堆排序 (heapsort)— O(n log n)

Smoothsort — O(n log n)

快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序

Introsort — O(n log n)

Patience sorting — O(n log n + k) 最外情況時間, 需要 額外的 O(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence)

不實用的排序演算法

Bogo排序 — O(n × n!) 期望時間, 無窮的最壞情況。

Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體

Bead sort — O(n) or O(√n), 但需要特別的硬體

Pancake sorting — O(n), 但需要特別的硬體

排序的演算法

排序的演算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序演算法。這裡面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩定;而後面三種排序相對於簡單排序對空間的要求稍高一點,但時間效率卻能穩定在很高的水平。基數排序是針對關鍵字在一個較小范圍內的排序演算法。

插入排序

冒泡排序

選擇排序

快速排序

堆排序

歸並排序

基數排序

希爾排序

插入排序

插入排序是這樣實現的:

首先新建一個空列表,用於保存已排序的有序數列(我們稱之為"有序列表")。

從原數列中取出一個數,將其插入"有序列表"中,使其仍舊保持有序狀態。

重復2號步驟,直至原數列為空。

插入排序的平均時間復雜度為平方級的,效率不高,但是容易實現。它藉助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。

冒泡排序

冒泡排序是這樣實現的:

首先將所有待排序的數字放入工作列表中。

從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。

重復2號步驟,直至再也不能交換。

冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。

選擇排序

選擇排序是這樣實現的:

設數組內存放了n個待排數字,數組下標從1開始,到n結束。

i=1

從數組的第i個元素開始到第n個元素,尋找最小的元素。

將上一步找到的最小元素和第i位元素交換。

如果i=n-1演算法結束,否則回到第3步

選擇排序的平均時間復雜度也是O(n²)的。

快速排序

現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關系,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何一個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查找數據得另當別論了。

堆排序

堆排序與前面的演算法都不同,它是這樣的:

首先新建一個空列表,作用與插入排序中的"有序列表"相同。

找到數列中最大的數字,將其加在"有序列表"的末尾,並將其從原數列中刪除。

重復2號步驟,直至原數列為空。

堆排序的平均時間復雜度為nlogn,效率高(因為有堆這種數據結構以及它奇妙的特徵,使得"找到數列中最大的數字"這樣的操作只需要O(1)的時間復雜度,維護需要logn的時間復雜度),但是實現相對復雜(可以說是這里7種演算法中比較難實現的)。

看起來似乎堆排序與插入排序有些相像,但他們其實是本質不同的演算法。至少,他們的時間復雜度差了一個數量級,一個是平方級的,一個是對數級的。

平均時間復雜度

插入排序 O(n2)

冒泡排序 O(n2)

選擇排序 O(n2)

快速排序 O(n log n)

堆排序 O(n log n)

歸並排序 O(n log n)

基數排序 O(n)

希爾排序 O(n1.25)
一、術語session
在我的經驗里,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。

session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候我們可以看到這樣的話「在一個瀏覽器會話期間,...」,這里的會話一詞用的就是其本義,是指從一個瀏覽器窗口打開到關閉這個期間①。最混亂的是「用戶(客戶端)在一次會話期間」這樣一句話,它可能指用戶的一系列動作(一般情況下是同某個具體目的相關的一系列動作,比如從登錄到選購商品到結賬登出這樣一個網上購物的過程,有時候也被稱為一個transaction),然而有時候也可能僅僅是指一次連接,也有可能是指含義①,其中的差別只能靠上下文來推斷②。

然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義,「面向連接」指的是在通信雙方在通信之前要先建立一個通信的渠道,比如打電話,直到對方接了電話通信才能開始,與此相對的是寫信,在你把信發出去的時候你並不能確認對方的地址是否正確,通信渠道不一定能建立,但對發信人來說,通信已經開始了。「保持狀態」則是指通信的一方能夠把一系列的消息關聯起來,使得消息之間可以互相依賴,比如一個服務員能夠認出再次光臨的老顧客並且記得上次這個顧客還欠店裡一塊錢。這一類的例子有「一個TCP session」或者「一個POP3 session」③。

而到了web伺服器蓬勃發展的時代,session在web開發語境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器之間保持狀態的解決方案④。有時候session也用來指這種解決方案的存儲結構,如「把xxx保存在session里」⑤。由於各種用於web開發的語言在一定程度上都提供了對這種解決方案的支持,所以在某種特定語言的語境下,session也被用來指代該語言的解決方案,比如經常把Java里提供的javax.servlet.http.HttpSession簡稱為session⑥。

鑒於這種混亂已不可改變,本文中session一詞的運用也會根據上下文有不同的含義,請大家注意分辨。
在本文中,使用中文「瀏覽器會話期間」來表達含義①,使用「session機制」來表達含義④,使用「session」表達含義⑤,使用具體的「HttpSession」來表達含義⑥

二、HTTP協議與狀態保持
HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向伺服器請求下載某些文件,無論是客戶端還是伺服器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的,好比一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關系一樣。

然而聰明(或者貪心?)的人們很快發現如果能夠提供一些按需生成的動態信息會使web變得更加有用,就像給有線電視加上點播功能一樣。這種需求一方面迫使HTML逐步添加了表單、腳本、DOM等客戶端行為,另一方面在伺服器端則出現了CGI規范以響應客戶端的動態請求,作為傳輸載體的HTTP協議也添加了文件上載、cookie這些特性。其中cookie的作用就是為了解決HTTP協議無狀態的缺陷所作出的努力。至於後來出現的session機制則是又一種在客戶端與伺服器之間保持狀態的解決方案。

讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯系。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想像一下其實也無外乎下面的幾種方案:
1、該店的店員很厲害,能記住每位顧客的消費數量,只要顧客一走進咖啡店,店員就知道該怎麼對待了。這種做法就是協議本身支持狀態。
2、發給顧客一張卡片,上面記錄著消費的數量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以後的消費相聯系起來。這種做法就是在客戶端保持狀態。
3、發給顧客一張會員卡,除了卡號之外什麼信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店裡的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在伺服器端保持狀態。

由於HTTP協議是無狀態的,而出於種種考慮也不希望使之成為有狀態的,因此,後面兩種方案就成為現實的選擇。具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上它還有其他選擇。

三、理解cookie機制
cookie機制的基本原理就如上面的例子一樣簡單,但是還有幾個問題需要解決:「會員卡」如何分發;「會員卡」的內容;以及客戶如何使用「會員卡」。

正統的cookie分發是通過擴展HTTP協議來實現的,伺服器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。

而cookie的使用是由瀏覽器按照一定的原則在後台自動發送給伺服器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給伺服器。意思是麥當勞的會員卡只能在麥當勞的店裡出示,如果某家分店還發行了自己的會員卡,那麼進這家店的時候除了要出示麥當勞的會員卡,還要出示這家店的會員卡。

cookie的內容主要包括:名字,值,過期時間,路徑和域。
其中域可以指定某一個域比如.google.com,相當於總店招牌,比如寶潔公司,也可以指定一個域下的具體某台機器比如www.google.com或者froogle.google.com,可以用飄柔來做比。
路徑就是跟在域名後面的URL路徑,比如/或者/foo等等,可以用某飄柔專櫃做比。
路徑與域合在一起就構成了cookie的作用范圍。
如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬碟上而是保存在內存里,當然這種行為並不是規范規定的。如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。

存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式。對於IE,在一個打開的窗口上按Ctrl-N(或者從文件菜單)打開的窗口可以與原窗口共享,而使用其他方式新開的IE進程則不能共享已經打開的窗口的內存cookie;對於Mozilla Firefox0.8,所有的進程和標簽頁都可以共享同樣的cookie。一般來說是用javascript的window.open打開的窗口會與原窗口共享內存cookie。瀏覽器對於會話cookie的這種只認cookie不認人的處理方式經常給採用session機制的web應用程序開發者造成很大的困擾。

下面就是一個goolge設置cookie的響應頭的例子
HTTP/1.1 302 Found
Location: http://www.google.com/intl/zh-CN/
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html

這是使用HTTPLook這個HTTP Sniffer軟體來俘獲的HTTP通訊紀錄的一部分

瀏覽器在再次訪問goolge的資源時自動向外發送cookie

使用Firefox可以很容易的觀察現有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。

IE也可以設置在接受cookie前詢問

這是一個詢問接受cookie的對話框。

四、理解session機制
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。

當程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個session id將被在本次響應中返回給客戶端保存。

保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於SEEESIONID,而。比如weblogic對於web應用程序生成的cookie,JSESSIONID=!-145788764,它的名字就是JSESSIONID。

由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現形式為http://...../xxx;jsessionid=!-145788764
另一種是作為查詢字元串附加在URL後面,表現形式為http://...../xxx?jsessionid=!-145788764
這兩種方式對於用戶來說是沒有區別的,只是伺服器在解析的時候處理的方式不同,採用第一種方式也有利於把session id的信息和正常程序參數區分開來。
為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。

另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。比如下面的表單
<form name="testform" action="/xxx">
<input type="text">
</form>
在被傳遞給客戶端之前將被改寫成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="!-145788764">
<input type="text">
</form>
這種技術現在已較少應用,筆者接觸過的很古老的iPlanet6(SunONE應用伺服器的前身)就使用了這種技術。
實際上這種技術可以簡單的用對action應用URL重寫來代替。

在談論session機制的時候,常常聽到這樣一種誤解「只要關閉瀏覽器,session就消失了」。其實可以想像一下會員卡的例子,除非顧客主動對店家提出銷卡,否則店家絕對不會輕易刪除顧客的資料。對session來說也是一樣的,除非程序通知伺服器刪除一個session,否則伺服器會一直保留,程序一般都是在用戶做log off的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉,之所以會有這種錯覺,是大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器後這個session id就消失了,再次連接伺服器時也就無法找到原來的session。如果伺服器設置的cookie被保存到硬碟上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的session id發送給伺服器,則再次打開瀏覽器仍然能夠找到原來的session。

恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間。

五、理解javax.servlet.http.HttpSession
HttpSession是Java平台對session機制的實現規范,因為它僅僅是個介面,具體到每個web應用伺服器的提供商,除了對規范支持之外,仍然會有一些規范里沒有規定的細微差異。這里我們以BEA的Weblogic Server8.1作為例子來演示。

首先,Weblogic Server提供了一系列的參數來控制它的HttpSession的實現,包括使用cookie的開關選項,使用URL重寫的開關選項,session持久化的設置,session失效時間的設置,以及針對cookie的各種設置,比如設置cookie的名字、路徑、域,cookie的生存時間等。

一般情況下,session都是存儲在內存里,當伺服器進程被停止或者重啟的時候,內存里的session也會被清空,如果設置了session的持久化特性,伺服器就會把session保存到硬碟上,當伺服器進程重新啟動或這些信息將能夠被再次使用,Weblogic Server支持的持久性方式包括文件、資料庫、客戶端cookie保存和復制。

復制嚴格說來不算持久化保存,因為session實際上還是保存在內存里,不過同樣的信息被復制到各個cluster內的伺服器進程中,這樣即使某個伺服器進程停止工作也仍然可以從其他進程中取得session。

cookie生存時間的設置則會影響瀏覽器生成的cookie是否是一個會話cookie。默認是使用會話cookie。有興趣的可以用它來試驗我們在第四節里提到的那個誤解。

cookie的路徑對於web應用程序來說是一個非常重要的選項,Weblogic Server對這個選項的默認處理方式使得它與其他伺服器有明顯的區別。後面我們會專題討論。

關於session的設置參考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869

~~我要200分~~

⑵ 如何位運算實現數的逆轉

#include <stdio.h>

int main()
{
char c = 0x95; //10010101
int i;
char res = 0;
int roundTime = sizeof(c)*8-1;
for(i = roundTime; i >= 0; i--){
if(c & (1<<i)){
res |= 1<<roundTime-i;
}
}
for(i = roundTime; i >= 0; i--){
if(res & (1<<i)){
printf("1");
}else{
printf("0");
}
}
return 0;
}

另外樓主可以將此段代碼封裝成函數 用C++ 可以寫成模板...

c語言編寫程序 :輸入一個正整數,將其逆序輸出。例如,輸入12345,輸出54321. 跪求大神用循環語句

#include<stdio.h>

int main()

{

int num;

scanf("%d",&num);

int a,i;

for(i = 0;num > 0;i++)

{

a = num % 10;

printf("%d",a);

num = num/10;

}

return 0;

}

分析:首先,輸入的是一個整數,因此最前面一位數不是零,所以我們可以用除10取余法寫。

a = num % 10

就是輸出數字的最後一位

然後除10剔除數字最後一位,這樣數字倒數第二位就會輸出。以此類推,就能逆序輸出數字。

拓展資料

for循環是編程語言中一種開界的循環語句,而循環語句由循環體及循環的終止條件兩部分組成,for循環其在各種編程語言中的實現與表達有所出入,但基本為以C語言和pascal語言代表的兩種形式。

C語言中的for循環如下

1.語句最簡形式為:

for( ; ; )

2.一般形式為:

for(單次表達式;條件表達式;末尾循環體)

{

中間循環體;

}



⑷ 數組的翻轉

printf("%s\n",str[i+1]); 錯的,應該是printf("%s\n",str+i+1);

⑸ 怎樣用c語言表示 翻轉的數 比如把81 翻轉為18

用c語言表示翻轉的數可以參考下面的代碼:

#include <stdio.h>

int main()

{int C,D,S;

scanf("%d",&C);

D=(C%10)*10+C/10;

S=C+D;

printf("S=%d",S);

}

(5)數字反轉編譯擴展閱讀:

scanf()是C語言中的一個輸入函數。

與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。

(在有一些實現中,printf函數與scanf函數在使用時可以不使用預編譯命令#include <stdio.h>。)它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。

⑹ NOIP2011年普及組試題哪裡有

全國信息學奧林匹克聯賽(NOIP2011)復賽普及組

全國信息學奧林匹克聯賽(NOIP2011)復賽

普及組

(請選手務必仔細閱讀本頁內容)

一.題目概況

中文題目名稱數字反轉統計單詞數瑞士輪表達式的值
英文題目與子目錄名 reverse stat swiss exp
可執行文件名 reverse stat swiss exp
輸入文件名 reverse.in stat.in swiss.in exp.in
輸出文件名
reverse.out stat.out swiss.out exp.out
每個測試點時限 1秒 1秒 1秒 1秒
測試點數目 10 10 10 10
每個測試點分值 10 10 10 10
附加樣例文件有有有有
結果比較方式全文比較(過濾行末空格及文末回車)
題目類型傳統傳統傳統傳統

二.提交源程序文件名

對於
C++語言 reverse.cpp stat.cpp swiss.cpp exp.cpp
對於
C語言 reverse.c stat.c swiss.c exp.c
對於
pascal語言 reverse.pas stat. pas swiss. pas exp.pas

三.編譯命令(不包含任何優化開關)

對於
C++語言
g++ -o reverse
reverse.cpp -lm
g++ -o stat
stat.cpp -lm
g++ -o swiss
swiss.cpp -lm
g++ -o exp
exp.cpp -lm
對於
C語言
gcc -o reverse
reverse.c -lm
gcc -o stat
stat.c -lm
gcc -o swiss
swiss.c -lm
gcc -o exp exp.c -lm
對於
pascal語言
fpc reverse.pas fpc stat.pas fpc swiss.pas fpc exp.pas

四.運行內存限制

內存上限
128M 128M 128M 128M

注意事項:
1、文件名(程序名和輸入輸出文件名)必須使用英文小寫。
2、C/C++中函數
main()的返回值類型必須是
int,程序正常結束時的返回值必須是
0。
3、全國統一評測時採用的機器配置為:
CPU P4 3.0GHz,內存
1G,上述時限以此配置為准。
4、特別提醒:評測在
NOI Linux下進行。

第 1 頁共 5 頁

全國信息學奧林匹克聯賽(NOIP2011)復賽普及組

1.數字反轉
(reverse.cpp/c/pas)
【問題描述】
給定一個整數,請將該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形
式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零(參見樣例
2)。

【輸入】
輸入文件名為
reverse.in。
輸入共
1行,一個整數
N。

【輸出】
輸出文件名為
reverse.out。
輸出共
1行,一個整數,表示反轉後的新數。

【輸入輸出樣例
1】

reverse.in reverse.out
123 321

【輸入輸出樣例
2】

Reverse.in reverse.out
-380 -83

【數據范圍】
-1,000,000,000 ≤ N ≤
1,000,000,000。

2.統計單詞數
(stat.cpp/c/pas)
【問題描述】

一般的文本編輯器都有查找單詞的功能,該功能可以快速定位特定單詞在文章中的位
置,有的還能統計出特定單詞在文章中出現的次數。

現在,請你編程實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章
中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,
即給定單詞必須與文章中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例
1),
如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例
2)。

【輸入】

輸入文件名為
stat.in,2行。


1行為一個字元串,其中只含字母,表示給定單詞;


2行為一個字元串,其中只可能包含字母和空格,表示給定的文章。

第 2 頁共 5 頁

全國信息學奧林匹克聯賽(NOIP2011)復賽普及組

【輸出】
輸出文件名為
stat.out。
只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,

分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字
母在文章中的位置,位置從
0開始);如果單詞在文章中沒有出現,則直接輸出一個整數
-1。

【輸入輸出樣例
1】

stat.in stat.out
To
to be or not to be is a question
2 0

【輸入輸出樣例
1說明】

輸出結果表示給定的單詞
To在文章中出現兩次,第一次出現的位置為
0。
【輸入輸出樣例
2】

stat.in stat.out
to
Did the Ottoman Empire lose its power at that time
-1

【輸入輸出樣例
2說明】

表示給定的單詞
to在文章中沒有出現,輸出整數
-1。
【數據范圍】

1 ≤單詞長度

10。

1 ≤文章長度

1,000,000。

3.瑞士輪
(swiss.cpp/c/pas)
【背景】

在雙人對決的競技性比賽,如乒乓球、羽毛球、國際象棋中,最常見的賽制是淘汰賽和
循環賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公
平,偶然性較低,但比賽過程往往十分冗長。

本題中介紹的瑞士輪賽制,因最早使用於
1895年在瑞士舉辦的國際象棋比賽而得名。
它可以看作是淘汰賽與循環賽的折衷,既保證了比賽的穩定性,又能使賽程不至於過長。

【問題描述】

2*N名編號為
1~2N的選手共進行
R輪比賽。每輪比賽開始前,以及所有比賽結束後,
都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已
參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。

每輪比賽的對陣安排與該輪比賽開始前的排名有關:第
1名和第
2名、第
3名和第
4
名、……、第
2K – 1名和第
2K名、……、第
2N – 1名和第
2N名,各進行一場比賽。每
場比賽勝者得
1分,負者得
0分。也就是說除了首輪以外,其它輪比賽的安排均不能事先確
定,而是要取決於選手在之前比賽中的表現。

現給定每個選手的初始分數及其實力值,試計算在
R輪比賽過後,排名第
Q的選手編

第 3 頁共 5 頁

全國信息學奧林匹克聯賽(NOIP2011)復賽普及組

號是多少。我們假設選手的實力值兩兩不同,且每場比賽中實力值較高的總能獲勝。

【輸入】

輸入文件名為
swiss.in。

輸入的第一行是三個正整數
N、R、Q,每兩個數之間用一個空格隔開,表示有
2*N名
選手、R輪比賽,以及我們關心的名次
Q。

第二行是
2*N個非負整數
s1, s2, …, s2N,每兩個數之間用一個空格隔開,其中
si表示編
號為
i的選手的初始分數。

第三行是
2*N個正整數
w1, w2, …, w2N,每兩個數之間用一個空格隔開,其中
wi表示編
號為
i的選手的實力值。

【輸出】

輸出文件名為
swiss.out。

輸出只有一行,包含一個整數,即
R輪比賽結束後,排名第
Q的選手的編號。

【輸入輸出樣例】

swiss.in swiss.out
2 4 2 1
7 6 6 7
10 5 20 15

【輸入輸出樣例說明】

本輪對陣本輪結束後的得分
選手編號 / ①



初始
/ 7 6 6 7

1輪
①—④
②—③
7 6 7 8

2輪
④—①
③—②
7 6 8 9

3輪
④—③
①—②
8 6 9 9

4輪
③—④
①—② 9 6 10 9

【數據范圍】

對於
30%的數據,
1 ≤
N ≤
100;

對於
50%的數據,
1 ≤
N ≤
10,000;

對於
100%的數據,
1 ≤
N ≤
100,000,1 ≤
R ≤
50,1 ≤
Q ≤
2N,0 ≤
s1, s2, …, s2N ≤
108,1 ≤
w1,
w2, …, w2N ≤
108。

4.表達式的值
(exp.cpp/c/pas)
【問題描述】
對於
1位二進制變數定義兩種運算:

第 4 頁共 5 頁

全國信息學奧林匹克聯賽(NOIP2011)復賽
普及組

運算符運算規則
0⊕0=0

0⊕1=1
1⊕0=1
1⊕1=1
0
×
0=0
×
0
×
1=0
1
×
0=0
1
×
1=1

運算的優先順序是:

1.
先計算括弧內的,再計算括弧外的。
2.
「×」運算優先於「 ⊕」運算,即計算表達式時,先計算×運算,再計算⊕運算。
例如:計算表達式 A⊕B × C時,先計算 B × C,其結果再與 A做⊕運算。
現給定一個未完成的表達式,例如_+(_*_),請你在橫線處填入數字 0或者 1,請問

有多少種填法可以使得表達式的值為 0。

【輸入】

輸入文件名為 exp.in,共 2行。

第 1行為一個整數 L,表示給定的表達式中除去橫線外的運算符和括弧的個數。

第 2行為一個字元串包含 L個字元,其中只包含 』(』、』)』、』+』、』*』這 4種字元,其中 』
(』、』)』是左右括弧, 』+』、』*』分別表示前面定義的運算符「 ⊕」和「×」。這行字元按順序
給出了給定表達式中除去變數外的運算符和括弧。
【輸出】

輸出文件 exp.out共 1行。包含一個整數,即所有的方案數。注意:這個數可能會很大,
請輸出方案數對 10007取模後的結果。

【輸入輸出樣例 1】

exp.in exp.out
4
+(*)
3

【輸入輸出樣例說明】

給定的表達式包括橫線字元之後為:_+(_*_)

在橫線位置填入 (0、0、0)、(0、1、0)、(0、0、1)時,表達式的值均為 0,所以共有 3
種填法。
【數據范圍】

對於 20%的數據有 0 ≤
L ≤
10。

對於 50%的數據有 0 ≤
L ≤
1,000。

對於 70%的數據有 0 ≤
L ≤
10,000。

對於 100%的數據有 0 ≤
L ≤
100,000。

對於 50%的數據輸入表達式中不含括弧。

第 5 頁共 5 頁

⑺ 用c#編寫一個控制台程序 輸入一個整數,將各位數字反轉輸出

string aa=Console.ReadLine();
char[] bb=aa.ToCharArry();
for(int i=bb.length-1;i>=0;i--)
{
Console.Write(bb[i]);
}
純手寫,不知道有錯沒,沒編譯沒調試

⑻ 用二維指針數組實現矩陣翻轉,代碼可以編譯鏈接但運行出問題,請各位大神指教(矩陣在主函數中初始化了)

不明白什麼叫 矩陣翻轉,是指 行不變,列反序,還是指行列交換,還是指 數據 順序 123456 變 654321。程序 不能正常運行 是因為 單單指針,沒有數據存放空間。你需要動態分配存儲空間後才能運行。
int **a;
int NR=3,NC=2; // NR--行數,NC--列數
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++){ a[j] = (int *) malloc(sizeof(int) * NC);
};
接下來你才可以用 a[i][j];
----------
下面做 行不變,列反序:
void reverse(int ** matrix,int m,int n,int f)
{
int matrix1,i,j;
for(i=0;i<n;i++)
for(j=0;j<m/2;j++)
{
matrix1=matrix[i][m-1-j];
matrix[i][m-1-j]=matrix[i][j];
matrix[i][j]=matrix1;
}
}
主函數調用法:
int main()
{
int i,j,k=0;
int **arr;
arr =(int **)malloc(10*sizeof(int*));
for (i=0;i<10;i++) arr[i]=(int *)malloc(10*sizeof(int));

for( i=0;i<3;i++){
for(j=0;j<2;j++)
{ k++; arr[i][j]=k;
}};
reverse(arr,2,3,1);
for( i=0;i<3;i++)
{
for(j=0;j<2;j++) printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}

⑼ c++數字反轉編譯錯誤跪求各位大神幫忙

你的C++數字反轉的程序,邏輯上有錯誤,我幫你改完了,你看看吧

#include<iostream>

using namespace std;

int main()

{

int a[20];

int i=0,n,m=0;

cin>>n;

int sign=n;

if(sign<0)

{

n=-n;

}

while(n)

{

a[i]=n%10;

n=n/10;

i++;

}

for(int k=0;k<i;k++)

{

m=m*10+a[k];

}

if(sign<0)

{

cout<<-m;

}

else

cout<<m;

return 0;

}

運行結果

輸入:-1234

輸出:-4321

⑽ c語言如何不用strrev函數反轉字元串

chara[256];
charb[256];

inti,j,x=0;
scanf("%d",&j);
scanf("%s",a);
while(a[x+1])
x++;//得到字元串的長度
for(i=0;i<j-1;i++)
b[i]=a[i];
for(i=j-1;i<=x;i++)
b[i]=a[x+j-i-1];//應該是x-(i-(j-1)),即x+j-i-1
b[i]='';//設置結束位
printf("%s ",b);

system("pause");

熱點內容
王者榮耀電腦如何改戰區安卓 發布:2025-01-17 13:23:18 瀏覽:814
華為手機如何開啟說出密碼 發布:2025-01-17 13:23:12 瀏覽:101
伺服器在美國說明什麼 發布:2025-01-17 13:14:10 瀏覽:11
啟辰t90有哪些配置 發布:2025-01-17 13:05:40 瀏覽:38
手機微博密碼怎麼改密碼忘了怎麼辦 發布:2025-01-17 13:04:44 瀏覽:959
微笑雲伺服器 發布:2025-01-17 13:03:25 瀏覽:83
android頂部標題欄 發布:2025-01-17 13:02:28 瀏覽:692
androidjs傳遞參數 發布:2025-01-17 12:51:54 瀏覽:477
建築大師輔助腳本 發布:2025-01-17 12:47:33 瀏覽:331
sql向上 發布:2025-01-17 12:43:57 瀏覽:275