首页 > 试题广场 >

添加逗号

[编程题]添加逗号
  • 热度指数:28946 时间限制: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() {
    char n[12];
    scanf("%s", n);
    int len = strlen(n);
    for (int i = len - 3; i > 0; i -= 3) {
        memmove(n + i + 1, n + i, len - i + 1);
        n[i] = ',';
        len++;
    }
    printf("%s", n);
}
发表于 2025-12-16 20:35:24 回复(0)
#include <stdio.h>
#include <string.h>
int main()
{
    char n[1000000]={0};//初始化,全为0
    scanf("%s",n);
    for(int i=0;i<strlen(n);i++)//strlen函数是在<string.h>下的一个计算字符串长度的函数
    {
        printf("%c",n[i]);
        if((strlen(n)-(i+1))%3==0 && (i+1) != strlen(n))//相当于i从1开始每三个,小于n
        {
            printf(",");
        }
    }
    return 0;
}
看评论区大佬一步一步跟着写下来的,楼主不熟悉字符串,只会简单的输入输出。
至少现在学到了一个<string.h>头文件,strlen这个计算字符串长度的函数。
希望那些和我一样的萌新有所启发吧。/_ \
发表于 2025-12-07 20:03:13 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char ch[30], result[30] = {0};  // 增大缓冲区确保安全
    scanf("%29s", ch);  // 安全输入
    int len = strlen(ch);
   
    // 计算新长度和逗号数
    int commas = (len - 1) / 3;
    int new_len = len + commas;
   
    // 从后往前处理
    for (int i = len-1, j = new_len-1, cnt = 0; i >= 0; i--) {
        if (cnt++ % 3 == 0 && j != new_len-1) {  // 每3位加逗号(不在首位)
            result[j--] = ',';
        }
        result[j--] = ch[i];
    }
   
    printf("%s", result);  // 直接输出整个字符串
    return 0;
}

发表于 2025-11-28 00:50:51 回复(0)
C语言这个也是能用啊
#include <locale.h>
#include <stdio.h>

int main() {
    setlocale(LC_NUMERIC, "");
    long long num;
    scanf("%lld", &num);
    printf("%'lld\n", num);
    return 0;
}

发表于 2025-08-19 19:35:36 回复(0)
#include <stdio.h>
#include<string.h>
int main() {
    int a, b;
    char c[100]={},f[100]={};
    scanf("%s",c);
    int t=strlen(c);
    int y=t/3,k=0,m=1;
    for(int g=t-1;g>=0;g--){
   
        if(m%3!=0){
            f[k]=c[g];
            k++;
            m++;
        }
        else if(m%3==0){
           
            if(g==0){
                f[k]=c[g];
                break;
            }
           if(g!=0){
                f[k]=c[g];
                f[k+1]=',';
                k+=2;
                m++;
            }
           
        }
     
    }
    int n=strlen(f);
    for(int z=n-1;z>=0;z--){
        printf("%c",f[z]);
    }
       
   
   
   
   
    return 0;
}
发表于 2025-08-14 23:32:07 回复(0)
#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 回复(1)
#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)

问题信息

难度:
32条回答 3904浏览

热门推荐

通过挑战的用户

查看代码
添加逗号