c语言高手急救:从键盘输入长整数n,将其从个位开始,每三位数字一组用逗号间隔输出。

例如,如果输入最大的长整数:2147483647
则输出:2,147,483,647

比楼上的优点是可分解负整数。
#include<stdio.h>
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");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-14
看看这个能不能满足你的要求,不过只能显示正整数

#include <stdio.h>

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;
}
相似回答