博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数1 游戏
阅读量:5984 次
发布时间:2019-06-20

本文共 880 字,大约阅读时间需要 2 分钟。

一、题目:

  给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

二.设计思想。

  分别算出每一位上1出现的次数,再加起来就是总的次数。

三、源程序

#include<iostream.h>

#include<math.h>

int main()

{

    int num,a[10],n,k,s=0,b,c;

    //double b,c;

    cout<<"请输入输入数字的位数:"<<endl;

    cin>>n;

    cout<<"请输入数字:"<<endl;

    cin>>num;

    cout<<endl;

    k=num;

    for(int i=0;i<n;i++)

    {

        a[i]=num%10;

        num=num/10;

    }

    for(i=0;i<n;i++)

    {

        if(a[i]>1)

        {

            b=pow(10,(i+1));

            c=pow(10,i);

            s=s+(k/b+1)*c;

            //cout<<a[i]<<" "<<s<<endl;

        }

        else if(a[i]==1)

        {

            b=pow(10,(i+1));

            c=pow(10,i);

            s=s+k/b*c+k%c+1;

            //cout<<a[i]<<" "<<k/b*c<<" "<<k%c<<" "<<s<<endl;

        }

        else

        {

            b=pow(10,(i+1));

            c=pow(10,i);

            s=s+k/b*c;

            //cout<<a[i]<<" "<<s<<endl;

        }

    }

    cout<<"从0到"<<k<<"中1的个数为:"<<endl;

    cout<<s<<endl;

    return 0;

}

四、结果截图

 

五、实验总结

   这次实验比较简单,但主要是找规律,先找出规律,写算法。以后在实验时也要多想一些不同算发法。

 

转载于:https://www.cnblogs.com/weaponx/p/4583111.html

你可能感兴趣的文章
Springboot2.1.3 + redis 实现 cache序列化乱码问题
查看>>
线程什么时候需要同步,什么时候不需要同步?
查看>>
Struts2 自定义拦截器(方法拦截器)
查看>>
SQL中存储过程的创建和使用
查看>>
荷兰政府:保证不强制在任何产品中留有后门
查看>>
编写单元测试的10条理由
查看>>
LINUX-SAMBA服务配置
查看>>
图像处理------光束效果
查看>>
基于ES5`defineProperty` 实现简单的 Mvvm框架
查看>>
关于UI设计的一些工作了解
查看>>
spring cloud构建互联网分布式微服务云平台-Spring Cloud Config环境库
查看>>
java B2B2C Springcloud仿淘宝电子商城系统-Zipkin服务端配置
查看>>
Node.js的npm全局安装包引用
查看>>
js事件杂谈
查看>>
SQL Server基础知识 -- SQL 用于各种数据库的数据类型
查看>>
angularjs~ng-class
查看>>
我的友情链接
查看>>
Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法...
查看>>
ROS标记时需要注意的
查看>>
django之防止csrf跨站***
查看>>