作者CubaMesa (梅總)
看板C_and_CPP
標題[問題] 整數陣列轉字串 / 字串轉整數
時間Sat Oct 8 17:26:55 2016
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
codeblocks
問題:
我現在在看清大陳煥宗老師的計算機程式設計開放式課程自學C
寫作業時因為不是本科系所以沒人問
題目如下列網址:(清大OJ)
http://acm.cs.nthu.edu.tw/problem/10097/
題目敘述:
這題要求把輸入的十進位數轉成三進位
然後將得到的三進位數
依照輸入的範圍1-8的另一個整數
輸出1-8的長度三進位數
e.g.
整數106 另一個整數:6
轉成的三進位數:10221
實際輸出結果要是長度6(不足補0): 010221
程式碼(Code):(請善用置底文網頁, 記得排版)
想法:
我是用陣列去做(只用老師目前有教的東西來解題目)
想法是十進位用長除法算出的三進位結果存入陣列
然後把結果倒過來
再把陣列轉乘整數或字串(這樣比較好動態配合另一個整數要求的長度)
第一個問題:
我把輾轉相除法的結果存入字元陣列中
然後在測試那邊加一個\0, 想說這樣可以變字串?
但似乎不行, 輸出是亂碼
為何不能加\0讓他變字串呢
第二個問題:
(因為a陣列存的是反過來的三進位結果
所以弄了一個b把他導正)
為了要配合輸入的第二個整數的長度
所以我想把字元陣列變成整數, 或者字串
這樣才能在printf的時候動態變化它的長度
但用atoi失敗了, 輸出變0
字元/整數陣列 轉 整數/字串
這裡有點混亂麻煩各位高手解惑了
#include <stdlib.h>
#include <stdio.h>
int main(){
int X, Y, i, j;
char a[64], b[64];
while(scanf("%d %d", &X, &Y)!= EOF){
/*長除法*/
i = 0;
while(X > 0){
a[i] = X % 3;
X = X / 3;
i++;
}
/*長除法*/
/*測試*/
a[i] = '\0';
printf("%s", a);
/*測試*/
/*倒過來*/
j = 0;
while(i > 0){
b[j] = a[i-1];
i--;
j++;
}
/*倒過來*/
int c = atoi(b);
printf("%d", c);
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.88.4
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1475918818.A.AF7.html
1F:→ Schottky: 你要把數字轉換成 ASCII code 才能以字元/字串型式印出 10/08 17:33
2F:→ Schottky: 也就是所有的值都要加上 '0' 字元 10/08 17:35
3F:→ Schottky: 或者說全部加上 48 10/08 17:36
好的我試試看
感謝, 這樣就解出來了~
4F:→ pttworld: 長除法的結果不需呼叫函式直接輸出檢查。 10/08 17:38
不太懂您意思
※ 編輯: CubaMesa (223.137.88.4), 10/08/2016 17:44:35
※ 編輯: CubaMesa (223.137.88.4), 10/08/2016 18:00:11
5F:→ pttworld: 解過就好。 10/08 18:57
6F:→ Sylveon: 我是系上學生 有需要可以聯絡 10/09 04:41