目录
一、问题描述
二、解题思路
三、源代码
拓展:
个人主页: 倔强的石头的博客
系列专栏 :C语言指南 C语言刷题系列
一、问题描述
二、解题思路
题目的要求,即对于一个较大的整数,每三位数字之间添加一个逗号,以便于阅读。这意味着我们需要从整数的最低位(最右边)开始,每数到三位数字就插入一个逗号,直到数完整个整数
一种有效的解决办法就是将数字转换为字符,从右向左每次%10得到一位数字转换为字符存储到数组中,再除以10去掉一位数字。其次,要注意每次满三位添加一个逗号至数组,并且只有满3位时才添加逗号。最后,将得到的这个字符数组逆序输出。
三、源代码
int main()
{
int N = 0;
scanf("%d", &N);//读入要处理的整数
char arr[14] = { 0 };//存储处理后的结果
int count = 0;//计数器
int i = 0;
for (; N != 0; N /= 10)
{
if (count != 0 && count % 3 == 0)
{
arr[i++] = ',';//每三位添加一个逗号,并且count初始为0时不添加
}
arr[i++] = N % 10 + '0';//将每一位转换为对应的字符存入数组
count++;
}
for (i--; i >= 0; i--)
{
printf("%c", arr[i]);//逆序输出
}
printf("\n");
return 0;
}
拓展:
如果想要让最后得到的字符数组以及打印时,是正常顺序,可以修改如下:
(将得到的字符数组顺序反转一下,最后只需要用%s打印即可)
#include<stdio.h>
int main()
{
int N = 0;
scanf("%d", &N);//读入要处理的整数
char arr[14] = { 0 };//存储处理后的结果
int count = 0;//计数器
int i = 0;
for (; N != 0; N /= 10)
{
if (count != 0 && count % 3 == 0)
{
arr[i++] = ',';//每三位添加一个逗号,并且N初始为0时不添加
}
arr[i++] = N % 10 + '0';//将每一位转换为对应的字符存入数组
count++;
}
int j = 0;//数组的首部下标
i--; //数组的尾部下标
//因为上面的代码块处理时i多+了1,所以这里-1才能得到正确的下标
while (j < i)
{
char tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
j++;
i--;
}
printf("%s\n", arr);
return 0;
}
个人主页: 倔强的石头的博客
(关注作者,获取更多有趣实用的编程知识哦)