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

#include<iostream>usingnamespacestd;intmain(){intn,temp,cnt=0;cin>>n;for(inti=1;i<=n;... #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;
}
展开
 我来答
xuzhouliuying
高粉答主

2017-02-02 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:5.4万
采纳率:86%
帮助的人:2.5亿
展开全部

关于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的值。
DAIZYWADE
2017-02-02 · TA获得超过359个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:31.8万
展开全部
更改后的程序,自己对照这找问题
#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),有更优的算法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式