问题描述
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是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函数可以直接格式化输出。。。