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

#include<iostream>
using namespace std;
int main()
{
int n,temp,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
while(i)
{
temp=i%10;
if(temp==1) cnt++;
cout<<cnt;
i/=10;
}
}
cout<<"出现1的次数为:"<<cnt;
return 0;
}

关于i的循环,又出现了i/=10,因此陷入了死循环。

可另设正整数k,令k=i

#include<iostream>
using namespace std;
int main()
{
int n,k,temp,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
k=i;
while(k)
{
temp=k%10;
if(temp==1) 
cnt++;   
cout<<cnt;   
k/=10;  
}
}
cout<<"出现1的次数为:"<<cnt;
return 0;
}

追问

为什么会出现死循环?
i最后=0时循环不是会跳出吗

追答

你的for循环是对i进行循环,循环后i加1
但是在循环中,又改变了i的值。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-02-02
更改后的程序,自己对照这找问题
#include<iostream>
using namespace std;
int main()
{
int n,temp=0,cnt=0,res;
cin>>n;
for(int i=1;i<=n;i++)
{
temp=i;
while(temp>0)
{
res=temp%10;
if(res==1) cnt++;
temp=temp/10;
}
}
cout<<"出现1的次数为:"<<cnt;
return 0;
}
另外,其实这个算法的复杂度太高了,接近O(n2),有更优的算法

...N的所有整数中包含数字1的个数。 求大神看看程序哪里错了!_百度知 ...
可另设正整数k,令k=i include<iostream>using namespace std;int main(){int n,k,temp,cnt=0;cin>>n;for(int i=1;i<=n;i++){k=i;while(k){temp=k%10;if(temp==1) cnt++; cout<<cnt; k\/=10; }}cout<<"出现1的次数为:"<<cnt;return 0;} ...

N为正整数,计算从1到N的所有整数中包含数字1的个数.用(c++)
stringstream ss_number, ss_digit; size_t pos; ss_number << number; ss_digit << digit; pos = ss_number.str().find(ss_digit.str()); if (

C语言 N为正整数,计算从1到N的所有整数中包含数字1的个数
如下:\/*用c语言编写程序 输入一个正整数n,求1到n的数中1出现的个数 \/#include"stdio.h"intcount(int n){int i,j,c=0;for(i=1;i<=n;i++){ j=i; while(j!=0){if(i%10==1) \/*判断位数中是否有1*\/{c++;} j=j\/10; \/*让数除以十让他原来的高位变为低位,即原来的十位...

C++ 求解一道题 给出任意一个整数n,计算出 从1到n中所有数中1出现的次...
include<string> using namespace std;int main(){ cout<<"input the n "<<endl;int n;cin>>n;for(int i=1;i<n+1;i++){ ostringstream os;os<<i;string temp=os.str();int count=0;for(int j=0;j<temp.length();j++){ if(temp[j]=='1')count++;} cout<<i<<"has siz...

N为正整数,计算从1到N的所有整数中包含数字1的个数。
var n,i,s:longint;m:string;begin read(n);for i:=1 to n do begin str(i,m);if pos('1',m)<>0 then s:=s+1;end;write(s);end.

用Python写程序:用户输入一个正整数N,计算从1到N(包含1和N)相加后...
用Python编写程序:用户输入正整数n,计算从1到n(包括1和n)相加的结果。实际上,它仍然是一个递归求和。第一个文本版本,然后添加图片。N=input(“please input integer N:”)sum=0 对于范围内的I(int(N)):(空四个空格)sum=I 1 print(“1 to N summation result:”,sum)“空四...

c++怎么计算一个数列中数字的个数?
int n=0;int i;int data;printf(“请输入一串数:\\n”);\/\/这个数值是Int类型的别超过最大值,既可 scanf(“%d”,&data);int num[10] = {0};while(data){ n = data%10;data \/=10;++num[n];} for(i = 0; i<10; i++){ if(num[i] > 0)printf(“数%d出现的次数是:%d”...

...正整数 n,按从大到小的顺序输出其中包含的数字。重复出现的数_百度...
给出一个十进制正整数n,按从大到小的顺序输出其中包含的数字。重复出现的数仅输出一次。循环概念:循环是程序设计语言中反复执行某些代码的一种计算机处理过程。在编程中,循环是一种重要的控制结构,用于重复执行某些操作,直到满足特定的条件。循环由循环入口、循环条件和循环体组成。根据条件的不同,循环...

用c++编程 输入一个整数n,输出1!+2!+3!+……+n! 急急急急急!
先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

从1到100的自然数中,数字“1”出现了多少次?请全部写出来,再回答
1出现了21次,因为11里面1出现了两次。1,10,11,12,13,14,15,16,17,18,19,21,31,41,51,61,71,81,91,100,一共21个。分析过程如下:1~9中,数字1出现了1次;10~19中,1出现了11次;20~90中,1出现了1×8=8次;100:1次。共出现了1+11+8+1=21次。

相似回答