一、问题描述
二、解题思路
题目的要求,即对于一个较大的整数,每三位数字之间添加一个逗号,以便于阅读。这意味着我们需要从整数的最低位(最右边)开始,每数到三位数字就插入一个逗号,直到数完整个整数
一种有效的解决办法就是将数字转换为字符,从右向左每次%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; }
个人主页: 倔强的石头的博客
(关注作者,获取更多有趣实用的编程知识哦)