c語言10進位轉16進位

2009-04-08 5:19 am
c語言10進位轉16進位 不能用%做的
哪位大大能幫我做一下= =

回答 (6)

2009-04-08 6:55 am
✔ 最佳答案
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
//==START==//
int nNum;
char cHex[32767];
printf("Input a number: "),scanf("%d",&nNum);
printf("HEX= 0x%s\n",itoa(nNum,cHex,16));
//==END==//
printf("\n"),system("PAUSE");
return 0;
}


2009-04-07 22:59:22 補充:
(0_0|||)
我是不是有看錯題目?
程式碼真的有需要那麼長嗎?
還是我的眼睛有問題?
參考: 程式碼應該可以短一點吧?!
2009-04-08 3:06 pm
看到這種題目一定要來插花一下

>>c語言10進位轉16進位 不能用%做的
以上三個回答均使用 %

bean_bottom_2
scanf("%d",&i);

東邪無弓
scanf("%d", &n)

耗呆小綿羊
scanf("%d",&nNum);

又 [C 語言不得使用iostream] 因此又不能使用 cin 方式.

int main()
{
 int v;
 scanf("\45u",&v);
 return printf("\45x",v);
}

完全不使用 % 方法 ^^"
2009-04-08 1:39 pm
To: 大雄
指標是 C 語言快的原因〝之一〞,也是它難學的地方〝之一〞。

Java 為了快而實做上使用指標,(Java因求跨平台而很慢)
為了好學,它並不讓程式師使用指標!
但 Java 本身實做上,卻一直在用指標!

我的程式語言老師、世界 UML 協會主要員委說:
 一個能運用 *****p 自如、寫出有意義的 *****p 程式的,
 稱為五星程式師。
可見它的難度。

敝人不才,約只有三星半。

東大那樣用,絕對是正確的!
就安全性、速度、C而非C++等,都是正確的。

2009-04-08 06:09:33 補充:
= = = = (以下與大雄無關)

實在很看不下去,就多寫一點。

如果不知自已幾斤重、對方的來歷,不要自曝其短!

有人數次笑罵有在這區活動的高手!
(當然還有世外超高人,只是沒在這裡出手。)

我看過這裡某人頂撞的高手中,我知道來歷的,有:
IBM 程式師,二人
25年以上程式師,二人
碩士畢業以上程式師,一人
碩士以上學歷程式師,一人
台灣比賽第一名,一人
台北比賽第一名,一人
還有其它,懶得再寫

那人曾在這區意見中寫:
 某題是碩士題,這裡活動的,多是大學生,不會有人能回答!
殊不知這裡我知道的碩士〝等級〞的回答者,超過10人!
其中,至少有兩位碩士研究的,正是那題!

2009-04-08 06:53:56 補充:
若只是要比原始程式小,printf("%X", n); 不是最小?(註:確定不合題意)
何必 itoa, while 轉換?
可見東大意見003是對的!
(題目本身就語意不清!
 % 是啥?
 %X %10 %16
 還是 %c %s %i ?


而我把東大和那人的程式拿去 VC 2005 SP1, TC201, DevC 4992,大小如下:
   VC  TC  DevC
 東 6144 9854 16014
 ○ 6144 9758 16807
那人的程式不見得比較小!
在速度上,東大的也比較快!

2009-04-08 06:55:04 補充:
比程式好壞,合題目、答案正確、例外處理能力等,永遠是第一優先考量!
那人的已在第一優先考量上輸了兩項!
程式易懂、好維護,才是第二
程式開發時間短、約是第三
程式執行快,約是第五

(編譯系的語言)〝原始程式〞小,除了特殊比賽,從來就沒有人看重過!
難道賣出去時,連原始碼一起賣?
寫註解是相當重要的!
難道為了原始程式小,不准寫註?
(工業上,註經常比程式長!)

我是不知那人的來歷;
但就其各回答中寫出程式的內容及架構等,約只有大三上的程度!

2009-04-08 06:55:35 補充:
大三上喔,我沒少打字!
不是大三以上!


不懂,請安靜學!
還有,學了後,不要一知半解到處抄、到處寫;
看起來好像是自己的!
明眼人都看得出:那是抄別人湊出來的!
甚至是抄自誰的,這裡至少有
 45 及 60 歲以上程式師各一人
他們真的能一眼認出! (這點我還不會)

2009-04-08 06:59:52 補充:
對了,我所謂的學歷/學士、碩士、博士,
是指真實的東西。

不是指香港知識+的等級。
2009-04-08 7:36 am
能否請東大告訴我(unsigned char*)&n的意思,我知道只取n的地址,但是又轉成unsigned char*就不知道是什麼意思了!
unsigned char *p = (unsigned char*)&n + sizeof(n);

以及p的地址值是自己給的不怕發生用到他人的地址嗎?
感謝!謝謝!!

2009-04-08 09:23:48 補充:
非常謝謝東大的說明和Jacob大大的回覆!
謝謝!!
2009-04-08 6:44 am
#include <stdio.h>
#include <stdlib.h>

int main()
{
int n;
char digit[]="0123456789ABCDEF";
while (1)
{
unsigned char *p = (unsigned char*)&n + sizeof(n);
printf("輸入一個整數(非數字則結束):");
if (scanf("%d", &n) < 1) break;
printf("十六進位: ");
while (--p >= &n)
printf("%c%c", digit[(*p) >> 4], digit[(*p) & 0xf] );
printf("\n");
}
system("pause");
return 0;
}




2009-04-07 23:27:24 補充:
這個題目,應有一個前提吧==>不能套用內建的轉換函式。
否則便失去意義了!

這個程式將「完整」顯示一個整數的十六進位,
以占 4Bytes 的整數而言,將顯示8位數的十六進位(含前導零)。

2009-04-07 23:40:47 補充:
若想換個模式,不想要顯示前導零,可作如下之修改。


while (--p >= &n)
printf("%c%c", digit[(*p) >> 4], digit[(*p) & 0xf] );
printf("\n");

2009-04-07 23:40:57 補充:
改成
int lead0 = 1;
while (--p >= &n)
{
if ( lead0 && *p==0 ) continue;
if ( !lead0 || ((*p)>>4) ) printf("%c", digit[(*p)>>4] );
printf("%c", digit[(*p) & 0xf] );
lead0 = 0;
}
printf("%s\n", lead0 ? "0" : "");

2009-04-07 23:55:35 補充:
有人看不懂題目,還在大放厥詞!

本題題目:c語言10進位轉16進位 「不能用%『做』的」。
這已隱隱表明要自訂函式,不能套用內建函式庫相關的轉換函式。

如果這是學校作業,直接引用諸如 itoa(nNum,cHex,16) 來應付了事,
絕對會被打回票,除非想拿自己的成績開玩笑!

如果不是作業,想借此冶練功力,那更是要自訂函式來磨練。

2009-04-08 00:15:23 補充:
問:unsigned char *p = (unsigned char*)&n + sizeof(n);
答:
p是字元指標,顧名思義,用來存放一個位址,由於要以Byte為單位來解析其值,char *故宣告為 。

n是int,p = &n 可以把 n 的位址存至 p,但如前所言 p是個字元指標,所以必須用 (unsigned char*)&n 把它轉成相符的指標。

sizeof(n) 取得整數所占的Bytes數,加上它以後,p將指向n的最高Byte位址+1的地方。

2009-04-08 00:18:05 補充:
在稍後的迴圈,是用 --p 來控制,剛進入while時 p 恰可指向 n最高Byte位址。

while 利用位址來控制,由高往低,便可依序轉換整數的這4個Bytes。

問:p的地址值是自己給的不怕發生用到他人的地址嗎?
答:只要程式夠嚴謹,何懼之有。就好像用刀子切菜,是有切到手的危險,但只要夠小心,便不會發生。

2009-04-08 00:20:19 補充:
問:unsigned char *p = (unsigned char*)&n + sizeof(n);
答:
p是字元指標,顧名思義,用來存放一個位址,由於要以Byte為單位來解析其值,char *故宣告為 。

n是int,p = &n 可以把 n 的位址存至 p,但如前所言 p是個字元指標,所以必須用 (unsigned char*)&n 把它轉成相符的指標。

sizeof(n) 取得整數所占的Bytes數,加上它以後,p將指向n的最高Byte位址+1的地方。

2009-04-08 00:21:11 補充:
在稍後的迴圈,是用 --p 來控制,剛進入while時 p 恰可指向 n最高Byte位址。
while 利用位址來控制,由高往低,便可依序轉換整數的這4個Bytes。

問:p的地址值是自己給的不怕發生用到他人的地址嗎?
答:只要程式夠嚴謹,何懼之有。就好像用刀子切菜,是有切到手的危險,但只要夠小心,便不會發生。

2009-04-08 13:59:45 補充:
感謝 Jacob 大師的提醝:
while (--p >= &n)
應改成 while (--p >= (unsigned char *)&n)
這樣比較嚴謹。
2009-04-08 5:57 am
#include <stdio.h>

void print_ch( int i )
{
if (i < 10) {
printf("%d",i);
} else {
printf("%c",'A'+i-10);
}
}

void print_16( int i )
{
int tmp= i>>4;

if (tmp == 0) {
print_ch(i);
} else {
print_16(tmp);
print_ch(i-(tmp<<4));
}
}

int main()
{
int i;

printf("Enter an integer: ");
scanf("%d",&i);
print_16(i);
printf("\n");
exit(0);
}





收錄日期: 2021-04-27 17:15:49
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090407000015KK09730

檢視 Wayback Machine 備份