比楼上的优点是可分解负整数。
#include
int main()
{ long n;
int i=0,j=0,f=0;
char x[60];
printf("n=");
scanf("%ld",&n);
if(n<0) { f=1;n=-n; }
for(;n!=0;n/=10)
{ x[i++]='0'+n%10;j++;
if(j==3)
{ j=0;
x[i++]=',';
}
}
if(f) printf("-");
for(i-=1+(x[i-1]==',');i>=0;i--)
printf("%c",x[i]);
printf("\n");
}
看看这个能不能满足你的要求,不过只能显示正整数
#include
void print(unsigned int a);
int main()
{
unsigned int m;
scanf("%u", &m);
print(m);
return 0;
}
void print(unsigned int a)
{
const unsigned long max_num = 30;
char buff[30] = {'\0'}; //定义一个缓冲区,大小为 max_num 字节。
char *p = buff + max_num - 1; /*将p指向buff的最后一个字符*/
int i = 0;
do
{
*--p = a % 10 + '0';
a /= 10;
i++;
if (i == 3)
{
i = 0;
if (a != 0)
*--p = ',';
}
} while(a != 0);
p = buff;
while (*p == '\0') p++; /* 查找字符串第一个不为'\0'的地址。不用担心找不到,因为buff中至少有一个字符'0' */
printf("%s", p);
return;
}