使用putchar输出一个long型整数
1. 题目:使用putchar(不能使用sprintf,itoa等)输出一个long整型数。
2. 分析:两种方法:(1)迭代输出 (2)递归输出
3. 代码:
View Code
1 //递归算法 2 void putlong(unsigned long n) 3 { 4 if (n < 10) 5 { 6 putchar(n+'0'); 7 return ; 8 } 9 putlong(n / 10); 10 putchar(n % 10 + '0'); 11 } 12 13 14 //迭代算法 15 void putlong(unsigned long n) 16 { 17 int dec=1; 18 int tmp1=n; 19 while (tmp1>9) 20 { 21 dec*=10; 22 tmp1/=10; 23 } 24 while (dec!=0) 25 { 26 putchar(n/dec+'0'); 27 n=n%dec; 28 dec/=10; 29 } 30 }
4. 注意问题:在递归算法中,要考虑到输入只有零的情况。如果写成下面这种形式,那么就会漏掉0这种特殊情况。
View Code
1 void putlong(unsigned long n) 2 { 3 if (n == 0) 4 return; 5 putlong(n / 10); 6 putchar(n % 10 + '0'); 7 }
5. 引申问题:将一个字符串反转:
View Code
1 void strReverse(const char* str) 2 { 3 assert(str); 4 if (*str=='\0') 5 { 6 return; 7 } 8 strReverse(str+1); 9 putchar(*str); 10 }
6. 参考文章:
http://www.leetcode.com/2010/02/here-is-one-of-questions-from-microsoft.html