文章目录
- 前言
- 一、千位分隔符是什么?
- 二、逻辑思考
- 1.方法一——利用while循环
- 2.方法二——利用函数递归
- 总结
提示:以下是本篇文章正文内容,下面案例可供参考
一、千位分隔符是什么?
千位分隔符其实就是一个逗号,在数字中,每三位后添加一个千位分隔符;
示例:123456789,添加千位分隔符的结果为:123,456,789
二、思考逻辑
1.方法一:while循环
代码如下(示例):
int i = 0;
int j = 0;
int main()
{
long long n = 0;
scanf("%lld", &n);
char arr[100];
while (n>=1)
{
i++;
if (i % 4 != 0)
{
arr[j] = n % 10 + '0';
}
else
{
arr[j] = ',';
arr[++j] = n % 10 + '0';
}
if (n/10!=0)
{
j++;
}
n = n / 10;
}
int k = 0;
for (k = j; k >= 0; k--)
{
printf("%c", arr[k]);
}
return 0;
}
(1)首先,要想实现最后输出带千位分隔符的数字,那么需要利用数组,并且因为C语言数组内部的元素一定是相同数据类型的元素,因此我们不能用整型数组来存储这些元素,所以我们应该用字符数组来接收这些元素;
并且由于所输入的数字可能有小数,而小数部分是不需要添加千位分隔符的,所以我们直接将需要输入的数字的数据类型定义为long long 类型,就能够直接将小数部分去掉,变为整型;
所以我们创建一个字符类型的数组,且要保证创建的数组的大小足够大,char arr[100];
(2)每隔三个元素,就要添加一个千位分隔符,并且要从数字最右边来算,每隔三个数字,添加一位,那么我们首先想到利用循环!并且要获取一个数最后一位的数字,那么我们可以利用取余运算符。但是获得的仍然是整型数据,因此我们需要把整型数据转化为字符类型:+‘0’即可;
而i%4!=0;实现每三个元素的循环处理;
n=n/10,直到n为一位数时,才不再进行j++;
并且要主义,n=n/10这个条件要放在if条件语句外面,否则的话,当n为一位数时,就无法进行下一次的循环,第一位数也就不能被赋值给相应的a[j];
2.方法二——利用函数递归
代码如下(示例):
int i = 1, j = 0;
void recombination(char a[], long long n)
{
if (i % 4 != 0)
{
a[j] = n % 10 + '0';//整型加上‘0’就变成对应的字符类型的数据;
}
else
{
a[j] = ',';
a[++j] = n % 10 + '0';
i++;
}
if (n / 10 != 0)
{
j++;
i++;
recombination(a, n / 10);
}
}
int main()
{
long long k, n;
char a[100];
scanf("%lld", &n);
if (n < 0)
{
printf("-");
n = -1 * n;
}
recombination(a, n);
for (k = j; k >= 0; k--)
printf("%c", a[k]);
return 0;
}
在这里还有局部变量与全局变量的区别问题;在这里,i与j都定义在main()主函数的外部,是全局变量,所以在函数内部,对于这两个变量的值进行修改,在到函数内部,这个值依然不会被销毁,依然可以继续使用;
最终的数组打印一定要从最后开始打印即倒着打印,才能得到正确顺序的结果!
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了添加千位分隔符的C语言的两种方式,而利用其它语言,例如python,也可以有其它形式的解法,读者感兴趣可以尝试用其它编程语言尝试解题!