当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,