今天的這道題目呢,跟我們之前講過的PAT乙級當中的一道“寫出這個數”有點類似。
都是要求輸入一個整數,打印出相應整數所對應的拼音,無非今天這道題目呢相對來說稍微簡單一些,而之前那道還要求和,再打印對應的拼音。
我們先來看看題目要求,當整數為負數時,先打印輸出fu字,整數包含負數、零和正數。
在一行中輸出這個整數對應的拼音,每個數字之間的拼音用空格分開,行末沒有最後的空格。
1、輸入一個整數,毫無疑問是可以用到一個scanf函數的。
2、整數所對應的拼音,我們需要用到一個數組來存儲這些拼音。
3、當整數為負數時,我們需要對輸入的整數進行一個條件語句判斷,如果小于零,那麼就進行一個單獨讨論。
4、每個數字之間的拼音用空格分開,行末沒有最後的空格,我們可以用到一個計數法,也可以用到一個條件語句判斷,到個位數的時候就不打印空格。
5、這道題既可以用遞歸的方式,也可以直接來求。
代碼實現我用的第一種方法,是遞歸函數。
//念數字
#include <stdio.h>
#include <string.h>
void recursive(int q){//不需要返回值,我就直接這麼寫
char *pingyin[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
if(q>9){//如果q有十位數的話,那就除以10取整,如果q隻是個位數的話,那就直接摘出來
recursive(q/10);//直接取整
printf(" ");
//遞歸主要目的就是把值給寫出來就行了
}
printf("%s",pingyin[q]);
}
int main() {
int n;
scanf("%d", &n);
if(n<0){
printf("fu ");
recursive(-n);
}
else{
recursive(n);
}
}
我用的第二種方法,用數組來存儲輸入整數的各個數字,然後對應拼音。
//念數字
#include <stdio.h>
#include <string.h>
int main() {
int n;
char *pingyin[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int store[10];
int i=0;
int count = 0;//計數法來給定空格
scanf("%d", &n);
if(n==0){//當輸入整數等于0的時候,要進行單獨讨論
printf("ling");
}
while(n!=0){
if(n>0){
store[i] = n;
n = n/10;
i ;
}
else{
store[i] = -n;
n = -n/10;
i ;
printf("fu ");
}
}
while(i>0){
i--;
if(count>0){
printf(" ");
}
printf("%s",pingyin[store[i]]);
count ;
}
}
總的來說,因為有了之前那道題目的經驗,這道題目完成就非常快了,不過還是得注意數組的用法,以及遞歸函數的邏輯,在使用遞歸函數的時候,我也經常會出現問題,得仔細仔細再仔細才行。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!