【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;
}

  个人主页:    倔强的石头的博客

(关注作者,获取更多有趣实用的编程知识哦)

相关文章
|
4天前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
4天前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
4天前
|
C语言
【C语言刷题系列】喝汽水问题
【C语言刷题系列】喝汽水问题
|
4天前
|
存储 C语言
【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)
【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)
|
4天前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
3天前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
3天前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
4天前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
4天前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
3天前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)