今日的这道题型呢,跟大家以前讲过的PAT甲级之中的一道“写下这一数”有点儿相近。
全是需要键入一个整数,打印出出相对应整数所对应的拼音,只不过今日这道题型呢相对而言略微简易一些,而以前那道还规定和,再打印出对应的拼音。
大家先一起来看看题型规定,当整数为负值时,先输出打印fu字,整数包括负值、零和正数。
在一行中輸出这一整数对应的拼音,每一个数字之间的拼音用空格分离,行末沒有最终的空格。
整理逻辑性
1、键入一个整数,不容置疑是能够用到一个scanf涵数的。
2、整数所对应的拼音,大家必须用到一个二维数组来储存这些拼音。
3、当整数为负值时,大家必须对键入的整数开展一个if语句分辨,假如低于零,那麼就完成一个独立探讨。
4、每一个数字之间的拼音用空格分离,行末沒有最终的空格,我们可以用到一个计数法,还可以用到一个if语句分辨,到个位的过程中也不打印出空格。
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 ; }}
結果检测
汇总
总体来说,由于拥有以前那道问题的工作经验,这道题型进行就特别快了,但是或是得留意二维数组的使用方法,及其递归函数的逻辑性,在应用递归函数的情况下,因为我常常会产生难题,得细心认真再细心才行。