程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 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}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved