标题:逗号分隔数字
只看楼主
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
结帖率:94.64%
 问题点数:0 回复次数:1 
逗号分隔数字
程序代码:
#include <stdio.h>

// long long 最大值 9223372036854775807 最小值 -9223372036854775808
// 最多只需要用19个字符就能存储C里的有符号最大类型的最大值,用20个字符就能存储有符号最小整数,加上一个'\0'为21个字符。
// -9,223,372,036,854,775,808 转换后最多需要 21 + 6 个字符。

char * convert(char * buf, __int64 num);  // 把num以逗号分隔组成的数存放在buf里,然后返回buf。

int main(void)
{
    char    buf[27];
    __int64 num;    // Windows 下用 __int64,Linux下用long long
   
    scanf("%I64d", &num);
    convert(buf, num);
    printf("%s\n", buf);
   
    return 0;
}

char * convert(char * buf, __int64 num)
{
    char szTmp[21];
    int  commas;
    int  iLen = sprintf(szTmp, "%I64d", num);
    int  i, j;
   
    if(szTmp[0] == '-' && iLen % 3 == 1 || iLen % 3 == 0)
        commas = iLen / 3 - 1;
    else
        commas = iLen / 3;
   
    for(i = iLen + commas - 4, j = 0; j < commas; i -= 4, j++)
        buf[i] = ',';
   
    for(i = iLen + commas - 1, j = iLen - 1; i > -1; i--)
        if(buf[i] == ',')
            continue;
        else
            buf[i] = szTmp[j--];
   
    buf[iLen + commas] = '\0';
   
    return buf;
}

大家以后也许会遇到。
搜索更多相关主题的帖子: long 存储 最大值 color 
2011-08-22 14:42
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:0 
顶一个先,做做沙发哈哈
2011-08-22 21:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-348122-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.238543 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved