c++十进制整数千位分隔符
原题为某游戏公司的试题,大意如下:写一个千位分隔符算法,函数原型是 char * format_thousands_separator(unsigned long val); 要求实现效果是 1.使用者不需要释放返回的字符串指针 2.支持最多调用16次而不返回相同指针地址。可以用以下方法测试
printf("num1(%s), num2(%s), num3(%s) ", format_thousands_separator(0),format_thousands_separator(123456),format_thousands_separator(23456789));
注:要求写出可编译并可以运行通过的程序代码。经过修改后,我目前最简洁的C代码描述如下
1char* format_thousands_separator(unsigned long val)
2{
3 static char buf[16][16];
4 static int c = 0;
5
6 long m, n = 0;
7 char* p = &buf[c++ % 16][15];
8 *p = ;
9
10 do
11 {
12 m = val % 10;
13 val = val / 10;
14 *--p = 0 + m;
15
16 if (val && !(++n % 3))
17 *--p = ,;
18
19 } while(val);
20
21 return p;
22}
这里再稍作一下扩展,使之能支持负数,代码描述如下
1char* format_thousands_separator(long val)
2{
3 static char buf[16][16];
4 static int c = 0;
5
6 long m, n = 0;
7 char* p = &buf[c++ % 16][15];
8 *p = ;
9
10 do
11 {
12 m = val % 10;
13 val = val / 10;
14 *--p = 0 + (m < 0 ? -m : m);
15
16 if (!val && m < 0)
17 *--p = -;
18
19 if (val && !(++n % 3))
20 *--p = ,;
21
22 } while(val);
23
24 return p;
25}
补充:软件开发 , C++ ,