189 8069 5689

打印1到最大的n位数——12-创新互联

  输入数字n,按顺序打印出从1到大的n位十进制数。比如输入3,则打印出1、2、3...一直到大的3位数即999。

创新互联公司专业为企业提供通山网站建设、通山做网站、通山网站设计、通山网站制作等企业网站建设、网页设计与制作、通山企业网站模板建站服务,十多年通山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

  其实一看这个题,就可以想到用一个循环来打印,循环次数就为10的n次方减一,即输入3循环999次依次打印出所对应的值。但是,有一个重要的点就是,如果n的值很大,大到溢出了所能表示的大整型范围的值,比如用long long数据类型都存放不下了要怎么办呢?这就可以考虑,用字符串的形式来表达大数据,反正只是说让打印出来;

程序设计如下:

#include 
#include 
using namespace std;

void PrintMaxNNum(size_t n)
{
    char *num = new char[n+1];//最后一个字符存放'\0'

    char* tmp = num;
    while(tmp < num+n)//初始化字符串将其全部设置为0
    {   
        *tmp = '0';
        ++tmp;
    }   

    *(tmp--) = '\0';//使tmp指向最后一个有效字符

    char *cur = tmp;
    
    while(cur >= num)
    {   
        while(*tmp < '9')//tmp始终在最后一位进行加1并输出
        {
            ++(*tmp);
            cout<= num; ++i)//用循环来完成在cur到tmp的期间字符表示数字的进位
        {
            if((tmp-i) < cur)//当要进的位数不够当前cur所能表示的范围时将cur范围扩大
                --cur;
            if(cur >= num)
            {
                ++(*(tmp-i));//进位
                if(*(tmp-i) <= '9')//若进位后不需要再向前进位,则输出并break重新回到最低位
                {
                    cout<

初步的思想就是用两个指针表示数字的范围,一个tmp指针始终处在最低位加1,当需要进位时不停地往cur的方向进位,直到cur超出字符串的范围;

运行程序:

打印1到大的n位数——12

这数字已经够密密麻麻的了,如果设置再大一些比如超出系统数据类型所能表示范围的位数,运算都要耗费些时间,这里就不设置验证了。

《完》

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


当前题目:打印1到最大的n位数——12-创新互联
地址分享:http://cdxtjz.cn/article/dshped.html

其他资讯