温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

剑指Offer之打印1到最大的n位数(题12)

发布时间:2020-07-24 00:15:10 来源:网络 阅读:299 作者:ye小灰灰 栏目:编程语言




 1 /****************************************                                                                                                    2     > File Name:test.c   3     > Author:xiaoxiaohui   4     > mail:1924224891@qq.com   5     > Created Time:2016年05月26日 星期四 15时31分00秒   6 ****************************************/   7    8    9   10   11   12 //此题的关键是解决大数问题,在这里我用字符数组解决大数的存储  13 //在字符数组的最后一位存的是最低位,依次往前推,加1是在最低位加的  14 //当低位为9时,加1会发生进位,所以进到高位时要先加1,所以要设置进位标志  15 //当最高位发生进位时,则表示到了最大的数  16   17   18 #include<stdio.h>  19   20 void Print(char* buf)  21 {  22     int size = sizeof(buf);  23   24     for(int i = 0; i < size; i++)      //使buf指向第一个不为‘0’的字符  25     {  26         if(buf[i] == '0')  27         {  28             buf++;  29         }  30         else  31         {  32             break;  33         }  34     }  35   36     printf("%s\t", buf);  37 }  38   39 int isBiggest(char* buf)  40 {  41     int flog = 0;  42     int size  = sizeof(buf);  43     int over_flog = 0;        //进位标志  44     int i = 0;  45   46     for(i = size - 1; i >= 0; i--)  47     {  48         int sum = buf[i] - '0' + over_flog;   //把最i位的值取出来  49         if(i == size - 1)     //当是最低位时,则在这一位上加1  50         {  51             sum += 1;  52         }  53   54         if(sum >= 10)     //产生进位  55         {  56             if(i == 0)    //当最高位要进位了,就代表已经是最大值了  57             {  58                 flog = 1;  59             }  60             else  61             {  62                 buf[i] = '0';    //这一位要变为0                                                                                            63                 over_flog = 1;   //高一位的要加1  64             }  65         }  66         else               //不需要进位  67         {  68             buf[i] = '0' + sum;  69             break;  70         }  71   72         return flog;  73     }  74 }  75   76   77 void PrintToMax(int n)  78 {  79     if(n <= 0)  80     {  81         printf("parameter is error!\n");  82         return;  83     }  84   85     char* buf = (char*)melloc( (n + 1) * sizeof(char));  86     memset(buf,'0',sizeof(buf));  87     buf[n] = '\0';  88   89     while( !isBiggest(buf))  90     {  91         Print(buf);  92     }  93   94     free(buf);  95 }  96


1 /****************************************                                                                                                    2     > File Name:test1.c   3     > Author:xiaoxiaohui   4     > mail:1924224891@qq.com   5     > Created Time:2016年05月26日 星期四 16时44分54秒   6 ****************************************/   7    8 #include<stdio.h>   9   10   11 void Print(char* buf)  12 {  13     int size = sizeof(buf);  14   15     for(int i = 0; i < size; i++)      //使buf指向第一个不为‘0’的字符  16     {  17         if(buf[i] == '0')  18         {  19             buf++;  20         }  21         else  22         {  23             break;  24         }  25     }  26   27     printf("%s\t", buf);  28 }  29   30 void PrintDigit(char* buf, int length, int index)  31 {  32     if(index == length)  33     {  34         Print(buf);  35         return;  36     }  37   38     for(int i = 0; i < 10; i++)  39     {  40         buf[index] = '0' + i;  41         PrintDigit(buf, length, index + 1);  42     }  43 }  44   45 void PrintToMax(int n)  46 {  47     if(n <= 0)  48     {  49         printf("parameter is error!\n");  50         return;  51     }  52   53     char* buf = (char*)melloc(size(char) * (n + 1));  54     memset(buf, '0', sizeof(buf));  55     buf[n] = '\0';  56   57     for(int i = 0; i < 10; i++)  58     {  59         PrintDigit(buf, n, 0);  60     }  61 }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI