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,有
对1到n内的数统计1的次数,时间复杂度就是
编程之美上讲解很详细,不想敲字了
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次, 但