前言 唉,總感覺想幫助老師確是力不從心,只能盡自己最大的努力,這一年多下來看還是學生靠譜,學歷高靠譜,學歷不能反應所有問題,但是可以反應大部分問題,至少我身為碩士經常學習算法或者計算機其它方面東西到深夜 題目 [html] 題目描述: 將一個長度最多為30位數字的十進制非負整數轉換為二進制數輸出。 輸入: 多組數據,每行為一個長度不超過30位的十進制非負整數。 (注意是10進制數字的個數可能有30個,而非30bits的整數) 輸出: 每行輸出對應的二進制數。 樣例輸入: 0 1 3 8 樣例輸出: 0 1 11 1000 思路 很明顯,30位的整數是無法用long int類型來表示的,因此我們采用char str[30]的數據結構來存儲這個大整數 字符串表示的大整數轉化為其他進制數步驟 www.2cto.com 通過將除數的每一位加起來判斷是否大於0來作為外層循環的終止條件 內層按位進行除法,存放在一個字符數組中,假設為str2 外層循環結束後,需要逆序str2數組(原理等同於用棧這種數據結構實現進制轉換) 演算紙上推導演算的過程(0:10還在學習代碼的人傷不起): AC代碼 [cpp] #include <stdio.h> #include <string.h> #include <stdlib.h> #define DATA 40 #define MAX 200 void tenToBin(char *str); char bin[MAX]; int main() { char str[DATA]; while(scanf("%s", str) != EOF) { tenToBin(str); puts(bin); } return 0; } /** * Description:字符串整數轉換為二進制 */ void tenToBin(char *str) { int i, j, k, len, sum, d; char temp; //初始化參數 sum = 1; len = strlen(str); k = 0; memset(bin, 0, sizeof(bin)); while(sum) { sum = 0; for(i = 0; i < len; i ++) { d = (str[i] - '0') / 2; sum += d; if(i == len - 1) { bin[k ++] = (str[i] - '0') % 2 + '0'; }else { str[i + 1] += (str[i] - '0') % 2 * 10; } str[i] = d + '0'; } } //逆序 for(i = 0, j = k - 1; i < j; i ++, j --) { temp = bin[j]; bin[j] = bin[i]; bin[i] = temp; } } /************************************************************** Problem: 1138 User: wangzhengyi Language: C Result: Accepted Time:90 ms Memory:908 kb ****************************************************************/