2015年7月27日 星期一

[C][瘋狂程設][03_運算子] A042_轉轉算2的冪次方、A043_十六進位檢視器

A042:轉轉算2的冪次方


輸入一個整數 n (0≤n<31),輸出2^n。
input:10
output:1024

Notes:

1.計算2的冪次方

使用 Arithmetic shift算術位移的left shift'<<'
int num=1;
num<<1: 數字1,左位移1位,表示1*2=2
num<<2: 數字1,左位移2位,表示1*2*2=4

Code:

#include <stdio.h>

int main(void){
 int input;
 scanf("%d",&input);
 printf("%d",1<<input);
 return 0;
}



A043:十六進位檢視器


輸入一段連文字,印出該連文字的十六進位資料
input: talks
output:74 61 6C 6B 73

Notes:


1.getchar

getchar會讀取每個字元,包含空白、跳格、換行字元。
scanf()只會讀取數字,並且會略過空白、跳格、換行字元。
本題若要使用scanf,擇要改寫成下列格式,才能抓到每個字元,若將%c改成%s,則只會抓到第一個字元:
        while((scanf("%c",&input)!=EOF){
  if(input!=' ')
   printf("%X ",input);
 }

2.十六進位顯示方式

使用"%x"或者"%X"皆可,差別在於結果顯示的字母是小寫或大寫,舉例如下:
    printf("%x ",input); //74 61 6c 6b 73
    printf("%X ",input); //74 61 6C 6B 73

3.去除空白字元

因為是輸入的方式,採取逐字元抓取,所以空白字元也會被抓進來處理。
但是題目的輸出不要顯示空白位元,所以要加入條件,遇到空白字元的時候不列印。
    if(input!=' ')


Code:

#include <stdio.h>

int main(void){

 int input;
 
 while((input=getchar())!=EOF){
  if(input!=' ')
   printf("%X ",input);
 }

 return 0;
}

1 則留言: