close
標題:

c語言不會做 請幫忙

發問:

假設有一個 五進位 數字(只有 0, 1, 2, 3, 4), 最多有四位數(範圍: 05 ~ 44445 ),寫一程式,使用者可以從鍵盤輸入五進位制之數字,程式執行後轉換成十進位之數字輸出。例如輸入 1234 則輸出 194。提示:(1) 先判斷是幾位數,判斷方式範例:輸入的數字是否在1000~4444之間,如果成立則有四位數輸入的數字是否在100~444之間,如果成立則有三位數à 以此類推10~44(二位數)、0~ 4(個位數)à 不在範圍內的即是輸入錯誤(2)... 顯示更多 假設有一個 五進位 數字(只有 0, 1, 2, 3, 4), 最多有四位數(範圍: 05 ~ 44445 ),寫一程式,使用者可以從鍵盤輸入五進位制之數字,程式執行後轉換成十進位之數字輸出。 例如輸入 1234 則輸出 194。 提示:(1) 先判斷是幾位數,判斷方式範例: 輸入的數字是否在1000~4444之間,如果成立則有四位數 輸入的數字是否在100~444之間,如果成立則有三位數 à 以此類推10~44(二位數)、0~ 4(個位數)à 不在範圍內的即是輸入錯誤 (2) 計算方式範例:12345=(1234/1000)×53+((1234%1000)/100)×52+((1234%100)/10)×51+(1234%10)×50) ?? à 三位數(100~444)、二位數(10~44)、個位數(0~4)請自行推算 (3)輸出格式: 您輸入的五進制數字 ”1234”, 轉成十進制的結果為” 194”. (其中五進制數字與十進制必須佔四格,如果輸入只有12,則格式為”? 12”,向右對齊, “(雙引號)也需列印出來)

最佳解答:

#include #include int main(void) { int input_number,output_number; printf("請輸入五進位制數字(0~4444): "); scanf("%d",&input_number); printf(" "); if(input_number >= 1000 && input_number <= 4444) { output_number = (input_number/1000)*5*5*5 + (input_number%1000/100)*5*5 + (input_number%100/10)*5 + input_number%10; printf("五進制 %d 的十進制數字為:%d ",input_number,output_number); } else if(input_number >= 100 && input_number <= 444) { output_number = (input_number/100)*5*5 + (input_number%100/10)*5 + input_number%10; printf("五進制 %d 的十進制數字為:%d ",input_number,output_number); } else if(input_number >= 10 && input_number <= 44) { output_number = (input_number/10)*5 + input_number%10; printf("五進制 %d 的十進制數字為:%d ",input_number,output_number); } else if(input_number >= 0 && input_number <= 4) printf("五進制 %d 的十進制數字為:%d ",input_number,input_number); else printf("您的輸入數字錯誤 "); system("pause"); return 0; }

其他解答:

分成兩個function喔, 第一個function, valid,檢查是否為合法的輸入。 其中,利用ascii碼來檢查字元是否為0,~4 第二個function做轉換用。 測試過,沒有問題。 最後,再把輸出格式,整理成你要的。 ------------------------------------以下為程式---------------------------------------- // 所有底線,是為了對齊用。你只要把他一次取代成空白即可 #include #include #include #include #include using namespace std; bool valid(string str){ __if(str.length() == 0 || str.length() > 4)return false; // 檢查字串的長度 ____for(int i = 0 ; i < str.length() ; i++){ ______if((int)str[i] > 52 || (int)str[i] < 48)return false; //檢查,裡面的字,是否為0~4 ____} __return true; } string convert(string str){ __int result = 0; __for(int i = 0 ; i < str.length() ; i++){ ____int digit = (str[str.length() - 1 - i])-48; //讀取每一位數 ____result += digit * pow(5,i); // 換算為十進位 __} __string str2 = ""; __char* temp = new char[4]; __str2 = itoa(result, temp, 10); // 將數字,轉為字串。temp是轉換時的佔存空間 __while(str2.length() < 4)str2 = " " + str2; //將輸出長度加成4 __str2 = '"' + str2 + '"'; // 頭尾加上雙引號。兩個單引號,中間夾一個雙引號 __delete temp; __return str2; } int main() { __string input; __cout << "請輸入您要輸入幾個數字?(最多4個)"; __cin >> input; __if(valid(input)){ ____cout << convert(input) << endl; __} __else{ ____cout << "invalid input " << endl; __} __return 0; }

 

此文章來自奇摩知識+如有不便請留言告知

13413D6BADCE0D57
arrow
arrow

    elahism 發表在 痞客邦 留言(0) 人氣()