题目:(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;
} 展开
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的值。
展开全部
更改后的程序,自己对照这找问题
#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),有更优的算法
#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),有更优的算法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询