FizzBuzz

写一个程序,输出从 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"
]

 1 /**
 2  * Return an array of size *returnSize.
 3  * Note: The returned array must be malloced, assume caller calls free().
 4  */
 5 char** fizzBuzz(int n, int* returnSize) {
 6     char  string[] = "0123456789";
 7     int i=0;
 8     char tmp[25]={'\0'};
 9     char ** p;
10     p=(char **)malloc(sizeof(char *) * n);
11     if(!p) return NULL;
12 
13     //开辟空间  **p
14     for(i=0;i<n;i++){
15         p[i] = (char *) malloc(sizeof(char) * 9);
16         if(!p[i]) return NULL;
17         memset(p[i] , '\0',9);
18     }
19 
20     for(i=1;i<=n;i++){
21         if(i%3 == 0 && i%5 == 0)
22         {memcpy(p[i-1], "FizzBuzz",strlen("FizzBuzz")); continue;}
23         else if(i%3 == 0){
24             memcpy(p[i-1],"Fizz",4);
25             continue;
26         }
27         else if(i%5 == 0){ 
28             memcpy(p[i-1],"Buzz",4);continue;
29         }
30         else{
31             
32             //itoa(i,tmp,10);
33             int t=0,j=0,len;int k=i;
34             while(k != 0){
35                 t = k%10;
36                 tmp[j++] = string[t];
37                 k = k/10;
38             }
39             //roll back
40             len =j;j=j-1;
41             while(k<len/2){
42                 tmp[k] =tmp[k] ^ tmp[j];
43                 tmp[j] =tmp[j] ^ tmp[k];
44                 tmp[k] =tmp[k] ^ tmp[j];
45                 k++;j--;
46             }
47             memcpy(p[i-1], tmp,strlen(tmp) );
48         }    
49     }
50     //for(i=0;i<n;i++)
51         //printf("%s\n",p[i]);
52     return p;
53 }

 

posted @ 2018-07-15 15:57  yushimeng  阅读(396)  评论(0编辑  收藏  举报