首页 > 试题广场 >

添加逗号

[编程题]添加逗号
  • 热度指数:16369 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个正整数 N \left(1 \leqq N \leqq 2\times10^9\right)
\hspace{15pt}现在需要将其转换为千分位格式,即从整数最低位开始,每三位数字插入一个英文逗号,以提高可读性。
\hspace{15pt}例如,对于 980364535,转换后为 980,364,535
\hspace{15pt}请编写程序完成该格式转换。

输入描述:
\hspace{15pt}在一行中输入一个整数 N \left(1 \leqq N \leqq 2\times10^9\right)


输出描述:
\hspace{15pt}输出一个字符串,表示将 N 转换为千分位格式后的结果。 
\hspace{15pt}请不要输出多余的空格或换行。
示例1

输入

980364535

输出

980,364,535
示例2

输入

6

输出

6

备注:

#include<stdio.h>
#include<string.h>
int main()
{ 
    int n = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    char ch[20];
    scanf("%d",&n);
     while(1)
    {
       ch[i]= n % 10 +'0'; //拿下末尾放到字符串中
       i++;
       j++;
       n = n/10;
       if(n==0)   //如果没有字符可放了,跳出循环,防止没有数字还加逗号
        break;
       if(j==3)     //累计三个加一个逗号
       {
        ch[i]=',';
        i++;
        j=0;
       }      
    }
    for(k=i-1;k>=0;k--) //倒序打印字符串
    {
        printf("%c",ch[k]);
    }
    return 0;
}

发表于 2025-01-07 15:19:55 回复(0)
#include <stdio.h>

int main() {
    char shu[100]={};int n=0;

    //将需要的数以字符串的形式存入数组,并获得最后一位元素的下标
    while (scanf("%c",&shu[n])!=EOF) {
        n++;
    }
    n-=2;
    
    //每输出三个元素就输出一个逗号,在位数能被三整除的情况下循环 数位/3-1次 后输出最后三个元素
    //位数不能被三整除的情况下 先输出 位数%3次 后再进入输出三次就输出一个逗号的循环
    int ci=1;//输出次数
    int di=0;//供循环时数组下标递增使用
    if ((n+1)%3==0) 
    {
     for (int x=1; x<=(n+1)/3-1; x++) {
        for (int y=1; y<=3; y++) {
            printf("%c",shu[di]);
            di++;
            if (ci%3==0) {
                printf(",");
            }
            ci++;
        }
     }   
     for (int j=0; j<3; j++) {
        printf("%c",shu[di]);
        di++;
     }
    }
    else
    {
        
     for (int j=0; j<(n+1)%3; j++) {
        printf("%c",shu[di]);
        di++;
     }

     //位数小于三则不输出逗号
     if (n+1>3) {
        printf(",");
     }

     for (int x=1; x<=(n+1)/3; x++) {
        for (int y=1; y<=3; y++) {
            printf("%c",shu[di]);
            di++;

            //判断是否到了循环的尾声,是则不再输出逗号
            if ((n+1)/3>1) {
                if (x==(n+1)/3) {
                    
                }
                else {
                    if (ci%3==0) {
                        printf(",");
                    }
                }
            }

            ci++;
        }
     }   
    }

    return 0;
}

发表于 2024-10-25 12:04:38 回复(0)
#include <stdio.h>
#include <string.h>

void translate_num(int n, char ret[]){
    char temp[20];
    //整数转换字符串函数sprintf
    sprintf(temp, "%d", n);
    int len = strlen(temp);
    int i = 0, j = 0, k = 0;
    //从后往前,每三个字符,加一个‘,’
    for (i = len - 1; i >= 0; i--,j++) {
        if (j > 0 && j%3 == 0){
            ret[k++] = ',';
        }
        ret[k++] = temp[i];
    }
    ret[k] = '\0';
    //将添加完逗号的字符串反转
    for (i = 0, j = k-1; i < j; i++, j--) {
        char tmp = ret[i];
        ret[i] = ret[j];
        ret[j] = tmp;
    }
}

int main() {
    int n = 0;
    scanf("%d",&n);
    char ret[100];
    translate_num(n, ret);
    printf("%s",ret);
    return 0;
}
//
// Created by Wilbur Lee on 7/7/2024.
//

发表于 2024-07-07 17:45:58 回复(0)
int main() {
    int n;
    char str[20];//用来逆序存放最终输出的数字n和字符','
    int i = 0;//作为str字符数组的下标
    int count = 0;//用来计数
    scanf("%d", &n); 
    while (n)//结束条件
    {
        if (count == 3)//count每到3就放一个逗号字符到字符数组里
        {
            str[i] = ',';
            count = 0;//count重新开始计数
            goto qu;
        }
        int num= n % 10;
        sprintf(&str[i], "%d", num);//sprintf是格式转换函数,把数字转换成对应的字符
        n /= 10;
        count++;
    qu:
        i++;//每放进去一个字符,下标就++一下
    }
    for (int j = i - 1; j >= 0; j--)//逆序打印出字符数组即可
    {
        printf("%c", str[j]);
    }
    return 0;
}



发表于 2024-04-28 09:56:57 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    long long N;
    scanf("%lld",&N);
    int num = N,count1 = 0;
    while(num != 0){
        num = num/10;
        count1++;
    }
    int count2 = (count1-0.1)/3;
    int gf = pow(1000,count2);
    int a = N/gf;
    N = N % gf;
    printf("%d",a);
    for(int i = 0;i < count2;i++){
        int bf = pow(1000,count2-i-1);
        a = N / bf;
        N = N % bf;
        if(a < 10){
            printf(",00%d",a);
        }
        else if(a < 100){
            printf(",0%d",a);
        }
        else{
            printf(",%d",a);}
    }

    return 0;
}
发表于 2024-03-04 10:40:30 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[10]={0};
    scanf("%s", str);
    for(int i=0; i<strlen(str); i++){
        printf("%c", str[i]);
        if((strlen(str)-(i+1))%3 == 0 && (i+1) != strlen(str)){
            printf(",");
        }
    }
    return 0;
}

发表于 2024-02-13 18:05:31 回复(0)
#include <stdio.h>
void add(long long n){
    if(n<1000){
        printf("%lld",n);
    }else {
    add(n/1000);
    printf(",%03d",n%1000);
    }
}
int main() {
    long long N=0;
    scanf("%lld",&N);
    add(N);
    return 0;
}

发表于 2024-02-11 19:12:17 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int arr[20] = { 0 };
    int n = 0;
    int i = 1;
    int count = 0;
    scanf("%d", &n);
    while(n)
    {
        arr[i] = n % 10;
        n /= 10;
        i++;
        count++;
    }
    for (int i = count; i >0; i--)
    {
        switch (count % 3)
        {
        case 0:
            if (i == 1)
            {
                printf("%d", arr[i]);
            }
            else if (i % 3 == 1)
            {
                printf("%d,", arr[i]);
            }
            else
            {
                printf("%d", arr[i]);
            }
            break;
        case 1:
        {
            if (i == 1)
            {
                printf("%d", arr[i]);
            }
            else if (i % 3 == 1 || i == count)
            {
                printf("%d,", arr[i]);
            }
            else
            {
                printf("%d", arr[i]);
            }
            break;
        }
        case 2:
        {
            if (i == 1)
            {
                printf("%d", arr[i]);
            }
            else if (i % 3 == 1 || i == count - 1)
            {
                printf("%d,", arr[i]);
            }
            else
            {
                printf("%d", arr[i]);
            }
            break;
        }
        }
    }
    return 0;
}
发表于 2023-12-16 08:49:40 回复(0)
#include <stdio.h>

int tmp=0;
int tag=0;
void Print(int n)
{
    if(n<1000)
    {
        printf("%d",n);
        if(1==tag)
        printf(",");
        return;
    }
    else
        tag=1;
        Print(n/1000);
    printf("%03d",n%1000);
    if(n!=tmp)
    printf(",");
}
int main()
{
    int n=0;
    scanf("%d",&n);
    tmp=n;
    Print(n);
    return 0;
}
发表于 2023-11-03 11:02:39 回复(0)
#include <stdio.h>
#include <string.h>

int main()
{
    char arr1[11] = { 0 };
    char arr2[15] = { 0 };
    char* p = arr2;
    gets(arr1);
    int len = strlen(arr1);
    if (len <= 3)
    {
        strncpy(arr2, arr1, 3);
        printf("%s\n", arr2);
    }
    else if (len > 3 && len <= 6)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i < 1; i++)
        {
            strncpy(arr2 + 15 - 3, arr1 + len - 3, 3);
            arr2[15 - 4] = ',';
            j += 3;
        }
        while (*p != ',')
        {
            p++;
        }
        strncpy(p-len+3, arr1, len-3);
        printf("%s\n", p - len + 3);
    }
    else if (len > 6)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i < 2; i++)
        {
            if (i == 0)//153920529
            {
                strncpy(arr2 + 15 - 3-1, arr1 + len - 3, 3);
            }
            else if (i > 0)
            {
                strncpy(arr2 + 15 - 3 - 1-1 - j, arr1 + len - 3 - j, 3);
            }
            arr2[15 - 4 -1- 4 * i] = ',';
            j += 3;
        }
        p = arr2;
        while (*p != ',')
        {
            p++;
        }
        strncpy(p - len + 6, arr1, len-6);
        printf("%s\n", p - len + 6);
    }
    return 0;
}

发表于 2023-10-01 15:13:32 回复(0)
#include <stdio.h>
void recursion(int num, int *p, int base){
    if(num){
        recursion(num / base, p, base);
        if(num < base){
            printf("%d",num % base);
        } else {
            printf("%03d",num % base);
        }
        if(num < *p){
            printf(",");
        } 
    }
}
int main() {
    int num, base = 1000;
    scanf("%d",&num);
    recursion(num, &num, base);
    return 0;
}

发表于 2023-02-28 19:20:57 回复(0)
#include <stdio.h>
int count(int x)
{
    int i=0;
    while(x)
    {
        x/=10;
        i++;
    }
    return i;
}
int main() {
    long long int n;
    scanf("%lld\n",&n);
    int a[30],x=n;
    for(int i=0;x;i++)
    {
        a[i]=x%10;
        x/=10;
    }
    for(int i=count(n)-1;i>=0;i--)
    {
        printf("%d",a[i]);
        if(i%3==0&&i!=0)
        printf(",");
    }
    printf("\n");
    return 0;
}

发表于 2022-11-17 17:03:55 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char n[20];
    while (scanf("%s", n) != EOF) {
        int m = strlen(n);
        int count = m % 3;
        int j = m /3;
        if(count == 0)
        {
            j--;
        }
        for(int i = 0; i < m; i++)
        {
            printf("%c",n[i]);
            
            if((i+1) % 3 == count && j--)
            {
                printf(",");
            }
        }



    }
    return 0;
}

发表于 2022-10-24 23:50:43 回复(0)
#include <stdio.h>
int main()
{
    int num;
    int arr[10]={};
    scanf("%d",&num);
    int i=0;
    while(num)
    {
        arr[i] = num%10;
        num/=10;
        i++;
    }
    printf("%d",arr[--i]);
    for(int j=i-1;j>=0;j--)
    {
        if((j+1)%3 == 0)
        {
            printf(",");
        }
        printf("%d",arr[j]);
    }
    printf("\n");
    return 0;
    
}
发表于 2022-08-06 15:20:22 回复(0)
#include <stdio.h>
#include <string.h>
int main()
{
    int n;
    char a[20] = {NULL};
    scanf("%d", &n);
    for(int i=0; n!=0; i++)
    {
        if((i+1)%4 != 0)
        {
            a[i] = n%10+48;
            n /= 10;
        }
        else
            a[i] = ',';
    }
    for(int i=strlen(a)-1; i>=0; i--)
        printf("%c", a[i]);
    return 0;
}

发表于 2022-07-03 12:44:26 回复(0)
#include<stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int c[20];
    int i = 0;
    while (n)
    {
        c[i++] = n % 10;
        n /= 10;
    }
    int k = i - 1, jus = 0;
    for (k = i - 1;k >= 0;k--)
    {
        printf("%d", c[k]);
        jus++;
        if((i-jus)%3==0&&jus!=i)
        {
            printf(",");
        }
    }
    return 0;
}
发表于 2022-06-24 13:56:11 回复(0)
#include <stdio.h>

int main(){
    long n;
    int arr[20] = { 0 }, i = 0;
    scanf("%ld", &n);
    while(n){
        arr[i] = n % 10;
        n /= 10;
        i++;
    }
    for(int j = i - 1, count = 0; j >= 0; j--, count++){
        printf("%d", arr[j]);
        if((i-1 - count) % 3 == 0 && count < i - 1)
            printf(",");
    }
    return 0;
}

发表于 2022-06-15 00:26:38 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    getchar();
    int count = 1;
    char str[20] = { 0 };
    while (n)
    {
        str[count++] = (n % 10) + '0';
        n /=10;
        if (count % 4 == 0 && n!=0)
            str[count++] = ',';
    }
  
    for (int i = count-1; i >=1; i--)
    {
        printf("%c", str[i]);
    }
    return 0;
}

发表于 2022-06-11 17:41:36 回复(0)
#include<stdio.h>

#define N 11

int main(void)
{
    char num[N] = { 0 };

    gets(num);

    int len = (int)strlen(num);

    int flag = (len - 1) % 3;
    /*分析可知:
    * 一个数的位数可以表示为三种:3n,3n+1,3n+2
    
    * 3n:123 456 789(3,6的后面插入逗号)
    *       3, 6的下标分别为2,5,模3的结果等于flag=(9-1)%3;
    *
    *3n+1,3n+2 同理可证
    */

    for (int i = 0; i < len; i++)
    {
        printf("%c",num[i]);

        //假如位数恰好为3n,最后不加逗号
        if (i % 3 == flag && i < len - 1)
        {
            printf(",");
        }
    }
    printf("\n");

    return 0;
}
发表于 2022-06-03 08:45:31 回复(0)

问题信息

难度:
25条回答 2613浏览

热门推荐

通过挑战的用户

查看代码
添加逗号