【leetcode】Fizz Buzz

问题描述

写一个程序,输出从 1 到 n 数字的字符串表示。

1. 如果 是3的倍数,输出“Fizz”;

2. 如果 是5的倍数,输出“Buzz”;

3.如果 同时是3和5的倍数,输出 “FizzBuzz”。

示例:

n = 15,

返回:
[
    "1",
    "2",
    "Fizz",
    "4",
    "Buzz",
    "Fizz",
    "7",
    "8",
    "Fizz",
    "Buzz",
    "11",
    "Fizz",
    "13",
    "14",
    "FizzBuzz"
]

提交代码如下

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */

char* int2str(int n)//实现int类型数字转化为字符串
{
    char *str=(char *)malloc(sizeof(char)*11);
    memset(str,0,sizeof(str));
    int m=1000000000;//最大的int数字是2147483647
    while(n/m==0)//找到n不为0的最高位
    {
        m/=10;
    }
    printf("m=%d,n=%d\n",m,n);
    int count=0;//计数n的位数
    while(n!=0)
    {
        int tmp=n/m;
        n=n%m;
        m=m/10;
        str[count++]='0'+tmp;
    }
    str[count]='\0';
    printf("str=%s\n",str);
    
    return str;
}

char** fizzBuzz(int n, int* returnSize) {
    if(n<1 || returnSize==NULL)
    {
        return NULL;
    }
    char **result=(char **)malloc(sizeof(char*)*n);
    char fizz[]="Fizz",buzz[]="Buzz",fizzBuzz[]="FizzBuzz";
    printf("sizeof(fizz)=%d, sizof(buzz)=%d, sizeof(fizzBuzz)=%d\n",sizeof(fizz),sizeof(buzz),sizeof(fizzBuzz));
    int i=1;
    for(i=1;i<=n;i++)
    {
        if(i%15==0)//i同时是3和5的倍数
        {
            result[i-1]=(char*)malloc(sizeof(char)*(sizeof(fizzBuzz)+1));
            memset(result[i-1],0,sizeof(result[i-1]));
            strncpy(result[i-1],fizzBuzz,sizeof(fizzBuzz));
        }
        else if(i%3==0)//i只是3的倍数
        {
            result[i-1]=(char*)malloc(sizeof(char)*(sizeof(fizz)+1));
            memset(result[i-1],0,sizeof(result[i-1]));
            strncpy(result[i-1],fizz,sizeof(fizz));            
        }
        else if(i%5==0)//i只是5的倍数
        {
            result[i-1]=(char*)malloc(sizeof(char)*(sizeof(buzz)+1));
            memset(result[i-1],0,sizeof(result[i-1]));
            strncpy(result[i-1],buzz,sizeof(buzz));            
        }
        else
        {
            char *str=int2str(i);
            result[i-1]=(char*)malloc(sizeof(char)*(sizeof(str)));
            memset(result[i-1],0,sizeof(result[i-1]));
            strncpy(result[i-1],str,sizeof(str));
        }
    }
    *returnSize=n;
    return result;
}

提交完代码之后,才知道sprintf函数可以直接格式化输出。。。

猜你喜欢

转载自blog.csdn.net/y___y___/article/details/80905861