赞
踩
- #include <stdio.h>
- #include<string.h>
- int Increment(char *number);
- void printnumber(char *number);
- void print(int n)
- {
- if(n<=0)
- return;
- char *number =new char[n+1];
- memset(number,'0',n);
- number[n]='\0';
-
- while(!Increment(number))
- {
- printnumber(number);
- }
-
- delete [] number;
- }
- int Increment(char *number)
- {
- int isoverflow=0;
- int ntakeover=0;
- int nlen=strlen(number);
- for(int i=nlen-1;i>=0;i--)
- {
- int nsum=number[i]-'0'+ntakeover; //ntakeover是前一步的进位
- if(i==nlen-1) //刚开始运算时第一位数字是0,故要加1
- nsum++;
-
- if(nsum>=10)
- {
- if(i==0)
- isoverflow=1; //第一位有进位,则溢出
- else
- {
- nsum-=10;
- ntakeover=1;
- number[i]='0'+nsum;
- }
- }
- else
- {
- number[i]='0'+nsum;
- break;
- }
- }
- return isoverflow;
- }
-
- void printnumber(char *number)
- {
- int isbeginning=1;
- int nlen=strlen(number);
-
- for(int i=0;i<nlen;i++)
- {
- if(isbeginning&&number[i]!='0')
- isbeginning=0;
- if(isbeginning==0)
- printf("%c",number[i]);
- }
- printf("\t");
- }
- int main()
- {
- int n;
- scanf("%d",&n);
- print(n);
- return 1;
- }
参考剑指offer——面试题12:打印1到最大的n位数
难点是在加1操作的处理——该程序加1操作的同时再加上前一步留下来的进位,然后再判断当前值是否大于9,如大于9,则当前位取个位上的数,进位置1,否之当前位直接取当前值。如果是模拟乘法运算,如n的阶乘,则要考虑进位大于10的情形。见http://blog.csdn.net/nanfeng224/article/details/39338835
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。