剑指off-打印1到n

来源:互联网 发布:抢网速软件 编辑:程序博客网 时间:2024/05/16 14:21
//题目:输出 1到n。焦点在于如果n很大,超过32位或者64位,这基本上无法表示
//解决的办法是用字符串模拟加法,但是如何模拟,如何控制循环呢?//memset(char* number,int ch,int n);作用将number前n个位置用ascII码代替memset(a,0,sizeof(a))
//用memset给每一个位赋值为ASCII'0'//strlen(s)不包括'\0'
//increase true 表示正常自增 false表示溢出停止自增
bool increase(char *number){    int flag=0;//进位标识位    int length=strlen(number);    for(int i=length-1;i>=0;i--)    {        int sum;        if (i==length-1) {            sum=number[i]-'0'+flag+1;        }        else        {sum=number[i]-'0'+flag;}                if (sum>=10) {            if (i==0) {                return false;            }            flag=1;            sum=sum-10;            number[i]=sum+'0';        }        else        {            number[i]=sum+'0';            break;        }    }    return true;}void printfnozero(char *number){    int flag=0;//标识前面是否有非0,0是没有 1是有    int length=strlen(number);    for (int i=0; i<length; i++) {        if (number[i]=='0' && flag==0) {            continue;        }        else        {            printf("%c",number[i]);            flag=1;        }    }    printf("    ");}void printoneton(int n){    char *number=new char[n+1];    memset(number, '0', n);//前n置0 最后一项置'\0'    number[n]='\0';    while (increase(number)) {        printfnozero(number);    }}


                                             
0 0
原创粉丝点击