N为正整数,计算从1到N的所有整数中包含数字1的个数.用(c++)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了N为正整数,计算从1到N的所有整数中包含数字1的个数.用(c++)相关的知识,希望对你有一定的参考价值。

比如,N=10,从1,2...10,包含有2个数字1.

参考技术A

确定是C++? 把数字转化成字符串,然后搜索相应的字符即可。 下面是一个简单的实现:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

bool isDigitinNumber(const unsigned int digit, const unsigned int number);

int main(int argc, char** argv) 

    const unsigned int num = 145; // 整数 N
    const unsigned int digit = 1; // 待搜查的数字
    unsigned int cnt = 0; // 包含数字的次数统计
    
    for (unsigned int i = 0; i < num; i++)
    
        if ( isDigitinNumber(digit, i) )
        
            cnt ++;
            cout << i << " "; // 调试输出,可以关闭
        
    
    cout << endl;
    cout << "Total " << cnt << " digit(s) of " << digit 
         << " in the Number " << num << endl;
    
    return 0;


bool isDigitinNumber(const unsigned int digit, const unsigned int number)

    bool found = false;
    stringstream ss_number, ss_digit;    
    size_t pos;
    
    ss_number << number;        
    ss_digit << digit;    
    
    pos = ss_number.str().find(ss_digit.str());
    if (pos != string::npos)
       found = true;
       
    return found;

追问

谢谢!

追答

不必客气。 是否符合你的要求? 或还有其它需要,比如希望代码最少,希望是存C,或者C++,都请明说。

追问

嘿嘿,表示看不懂,我只看懂简单的(c++)

追答

所以我一开始就问你,是否C++。 是C还是C++?iostream,string等都是STL,即C++的标准库。

参考技术B 比如 1201,这样做
先 拿10取余数,看末尾是否是1

然后 1201/10得到 120
再拿120%10

然后120/10 得到 12
。。。。
参考技术C #include<stdio.h>
int main()
int n,i,a[10000],b,t;
while(scanf("%d",&n)!=0)

for(i=1;i<=n;i++)
t=0;b=i;

while(b>0)
if(b%10==1)
t++;

b=b/10;

a[i]=a[i-1]+t;
printf("%d\n",a[n]);

参考技术D #include "stdio.h"
#define N 5

short fun(short *a);
void input(short *a);

main()

    short a[N];
    
    input(a);
    
    printf("%hd",fun(a));

short fun(short *a)

 short i;
 short count=0;
 
 for(i=0;i<N;++i)
     if(a[i]==1)
         count++;
   
 return count;

void input(short *a)

 short i;
 
 for(i=0;i<N;++i)
     scanf("%hd",a+i);

追问

谢谢!

第5个回答  2013-06-17 你想要别人给你写代码啊?

从1到n整数中1出现的次数

题目

输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12共出现5次

解题

这个题目比较难
直接暴力

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int count = 0;
        for(int i =1;i<=n;i++){
            count +=NumberOf1(i);
        }
        return count;
    }
    public int NumberOf1(int num){
        int count =0;
        while(num!=0){
            if(num%10==1){
                count++;
            }
            num/=10;
        }
        return count;
    }
}

对数字n,有log(n)
对1到n内的数统计1的次数,时间复杂度就是nlog(n)

编程之美上讲解很详细,不想敲字了

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int count = 0;
        int factor = 1;
        int low = 0;
        int cur = 0;
        int high = 0;
        while(n/factor!=0){
            cur = (n/factor)%10; //当前位
            low = n - (n/factor)*factor ;// 低位数字
            high = n/(factor*10); //更高位
            switch( cur){
                case 0:
                    count+= high* factor;
                    break;
                case 1:
                    count+= high* factor + low + 1;
                    break;
                default:
                    count +=(high+1) * factor;
                    break;
            }
            factor *=10;
        }
        return count;
    }
}

以上是关于N为正整数,计算从1到N的所有整数中包含数字1的个数.用(c++)的主要内容,如果未能解决你的问题,请参考以下文章

题目:(c++)N为正整数,计算从1到N的所有整数中包含数字1的个数。 求大神看看程序哪里错了!

从1到n整数中1的个数,老师问小明1~13中包含1的个数有多少?

从1到非负整数n中1出现的次数 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? 为此他特别数了一下1~13中包含1的数字有110111213因此共出现6次, 但

从1到n整数中1出现的次数

整数中1出现的次数(从1到n整数中1出现的次数)

整数中1出现的次数(从1到n整数中1出现的次数)