添加千位分隔符——C语言

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、千位分隔符是什么?

千位分隔符其实就是一个逗号,在数字中,每三位后添加一个千位分隔符;

示例: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;
}
第二种方法,其实与第一种while循环的思想一致,不过是,循环条件换成了递归!

在这里还有局部变量与全局变量的区别问题;在这里,i与j都定义在main()主函数的外部,是全局变量,所以在函数内部,对于这两个变量的值进行修改,在到函数内部,这个值依然不会被销毁,依然可以继续使用;

最终的数组打印一定要从最后开始打印即倒着打印,才能得到正确顺序的结果!


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了添加千位分隔符的C语言的两种方式,而利用其它语言,例如python,也可以有其它形式的解法,读者感兴趣可以尝试用其它编程语言尝试解题!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值