列表

详情


BC146. 添加逗号

描述

对于一个较大的整数 N(1<=N<=2,000,000,000)
比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这 个数字每三位加一个逗号,它会变得更加易于朗读。
因此,这个数字加上逗号成如下的模样:980,364,535请写一个程序帮她完成这件事情

输入描述

一行一个整数 N

输出描述

一行一个字符串表示添加完逗号的结果

示例1

输入:

980364535

输出:

980,364,535

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-03-07

#include <stdio.h>

int main()
{
	char x[11] = { 0 };
	char result[16] = { 0 };
	scanf("%s", &x);
	int len = strlen(x);
	int i = 0;
	int j = 0;
	for (i = 0; x[i] != '\0'; j++)
	{
		if ((len - i) % 3 == 0 && i != 0 && result[j - 1] != ',')
			result[j] = ',';
		else
		{
			result[j] = x[i];
			i++;
		}

	}
	printf("%s\n", result);
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-04-30

#include<string.h>
#include<stdio.h>
void fun(char p[])
{
    int n = 0;
    n = strlen(p);//计算出n的值strlen函数计算字符串的长度,不包括‘\0'
    for (int i = n - 3; i > 0; i -= 3)//i=6
    {
        int j = n;//j=9;
        for (j; j >= i; j--)
        {
            p[j + 1] = p[j];//
            if (j == i)
            {
                p[j] = ',';
                n++;
            }
        }

    }
}
int main()
{

    char a[25] = { 0 };//123 456 789
    gets(a);
    fun(a);
    printf("%s\n", a);

    return 0;

}

C 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2022-06-03

#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;
}

C 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2022-05-01

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[11]={0};
    char arr2[20]={0};
    int i=0,j=0,k=0;
    gets(arr1);
    int ret=strlen(arr1);
    for(i=ret;i>0;i--){
        k+=1;
        if(k!=1&&k%3==1)
        {
            arr2[j]=',';
            arr2[j=j+1]=arr1[i-1];
        }
        else
            arr2[j]=arr1[i-1];
        j++;
    }
    for(i=j-1;i>=0;i--){
        printf("%c",arr2[i]);
    }
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2022-03-12

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[2000] = { 0 };
    gets(arr);
    int len = strlen(arr);
    int i = 0;
    for (i = 1; i <= len; i++)
    {
        printf("%c", arr[i - 1]);
        if (len == 1 || len == 2)
            continue;
        if ((len - 1) % 3 == 0)
        {
            if ((i == 1) || (((i - 1) % 3 == 0) && i != len))
            {
                printf(",");
            }
            continue;
        }
        if ((len - 2) % 3 == 0)
        {
            if ((i == 2) || (((i - 2) % 3 == 0) && i != len))
            {
                printf(",");
            }
            continue;
        }
        if ((i % 3 == 0) && i != len)
            printf(",");
    }
    return 0;
}   

上一题