1、写函数,输入一个整数,将其转换为字符串输出。例如,输入整数 86556,输出字符串“86556“。首先确定函数头,函数输入一个 long 型整数,输出一个 char 型字符数组,因此可以定为void long2string( long lNum, char chWord )注意这里的整数可能比较大,不要定为 int 型。函数中,可以首先利用循环和%和/运算符,依次取得整数的每个位。思路如下:例如 86556,我们可以将其对 10 取余,得到个位 6;将 86556 除 10 余8655,继续对 10 取余,得到十位 5; 以此类推,直到该数变为 0 为止。这样就可以将整数的每个位分离出来。在上
2、述的循环过程中,将分离出的数字依次保存到字符数组中。但是要注意,字符数组中保存的是字符,是数字的 ASCII 码,而不是数字本身的值。因为 ASCII 码表中阿拉伯数字的码值是连续的,因此一个常用的技巧是,字符 0加数字值即为该数字的 ASCII 码值。上述过程结束后,字符数组里存放了整数的每个位,但是不符合题目的要求,顺序正好相反。这可以用一个循环对数组进行转置:字符串第一个元素和最后一个元素对换;第二个元素和倒数第二个元素对换; 程序循环进行 字符串长度/2 次(如果字符串长度为奇数,中间元素正好不用处理) 。void long2string(long lNum,char chWord)
3、/ int i=0,j;char chTemp;while(lNum!=0) /*依次取整数的末位,存入 chWord */chWordi=0+lNum%10; /*转换为数字的 ASCII 码*/i+;lNum=lNum/10;chWordi=0; /*字符串最后一位加 0*/for(j=0;ji/2;j+) /*将字符串转置*/chTemp=chWordj;chWordj=chWordi-1-j;chWordi-1-j=chTemp;int main()/* lNum 是输入的整数,chWord 是转换后的字符串 */long lNum;char chWord50;printf(“nPle
4、ase input a integer:n“); /*输入一个整数 */scanf(“%ld“,long2string(lNum,chWord);printf(“The outputed string=%s“,chWord);运行结果为:Please input a integer:1972The outputed string=1972函数 long2string 也可以使用递归函数实现,下面是使用递归和指针的一个例子(main 函数可以不做改动):void long2string( long lNum,char *pszWord )if(lNum=0) /*如果 lNum 等于 0,不用继
5、续递归*/*pszWord=0; /*字符数组的第一个单元是字符串结束符,后续的过程要根据它添加整数的位,如果没这句,则程序运行时奔溃*/return;long2string(lNum/10,pszWord); /*先递归处理 lNum 前面的位*/while(*pszWord) /*再将 lNum 的最后一位添加到字符串后*/pszWord+;*pszWord+ = 0+lNum%10;*pszWord=0; /*不要忘记处理字符串结束符*/备注:如果没有*pszWord=0这句的话,在 while 判断那里,程序会不断循环,直到找到一个字符0为止,才结束 while 循环,找不到则不停的死循环!这是非常危险的。故程序的最后一个*pszWord=0; /*不要忘记处理字符串结束符*/是起一样的作用的。/以上递归版本,自己拿个数 98 进行模拟跑一遍,就知道程序的原理与正确性了。