写的代码出了点问题,麻烦大家看一下

pang123hui 2010-02-03 09:54:23
给定一个十进制的正整数N,写下从1开始,到N的所有整数,然后数一下一种出现的所有的1的个数。

例如:

  N=2,则写下1,2,这样1的个数为5
  N=10,则写下1,2,3,4,5,6,7,8,9,10,这样1的个数为2

问题是:
1.写一个函数f(N),返回1到N之间出现的1的个数,比如f(10)=2


int fun(int n)
{
int i;
int count=0;

if(n<=0)
{
return 0;
}

for(i=1;i<n+1;i++)
{
while(i)
{
if(i%10==1)
{
count++;
}
i/=10;
}
}
return count;
}


为什么不对呢???
...全文
98 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzx714 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pang123hui 的回复:]
引用 4 楼 xylicon 的回复:
i/=10; i在这里变成0了。然后i++又变成1了。
然后又变成0了。然后又变成1了


死循环。

假如i/=10;i在这里变成0了,应该是跳出了while循环,

再在for循环里i++,

好像和你说的没关系啊
[/Quote]这让我想起了以前我没做到的一个题,写一个函数,有一个参数i,函数判断参数i是不是一个水仙花数(指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身),当时我就是按照楼主的想法来求的,也就是%来求,但当时我不知道如何来确定该%几次,现在还是觉得我现在这个解法(转换成字符串)比较好
musiclee 2010-02-03
  • 打赏
  • 举报
回复
for(i=1;i<n+1;i++)
{
int temp=i;
while(temp!=0)
{
if(temp%10==1)
cout++;
temp=temp/10;
}
}
djlxue 2010-02-03
  • 打赏
  • 举报
回复
根据楼主意思改的 测试成功

int fun(int n)
{
int count=0,m=0;

if(n<=0)
{
return 0;
}

for(int i = 1;i<n+1;i++)
{
m = i;
while(m)
{
if(m%10==1)
{
count++;
}
m/=10;
}
}
return count;
}
pang123hui 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xylicon 的回复:]
引用 5 楼 pang123hui 的回复:
引用 4 楼 xylicon 的回复:
i/=10; i在这里变成0了。然后i++又变成1了。
然后又变成0了。然后又变成1了


死循环。

假如i/=10;i在这里变成0了,应该是跳出了while循环,

再在for循环里i++,

好像和你说的没关系啊


是这样的,没错它跳出了while循环。但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

然后跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

然后跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

死循环。


[/Quote]

明白了,还是我的错,非常感谢
yzx714 2010-02-03
  • 打赏
  • 举报
回复
我的实现:
int fun(int n)
{
int ret=0;
int i=1;
while(i<=n){
char str[10];
sprintf(str,"%d",i);
char* p=str;
while(*p != '\0'){
if(*p++ == '1'){
++ret;
}

}
++i;
}
return ret;
}
xylicon 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pang123hui 的回复:]
引用 4 楼 xylicon 的回复:
i/=10; i在这里变成0了。然后i++又变成1了。
然后又变成0了。然后又变成1了


死循环。

假如i/=10;i在这里变成0了,应该是跳出了while循环,

再在for循环里i++,

好像和你说的没关系啊
[/Quote]

是这样的,没错它跳出了while循环。但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

然后跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

然后跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

跳出while循环但再在for循环那里i++这个时候,i是不是为1
然后又进入while循环。然后又是i/10,i在这里又变成0了。

死循环。

pang123hui 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yzx714 的回复:]
先不说你的代码。
我个想法是把每个数字转换成字符串了在数1比较好,大家的看法如何
[/Quote]

一开始是这样想的,但觉得是不是麻烦了,按我的思路应该是可以的,只是不知道为什么就是输出不了结果,郁闷
pang123hui 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xylicon 的回复:]
i/=10; i在这里变成0了。然后i++又变成1了。
然后又变成0了。然后又变成1了


死循环。
[/Quote]
假如i/=10;i在这里变成0了,应该是跳出了while循环,

再在for循环里i++,

好像和你说的没关系啊
xylicon 2010-02-03
  • 打赏
  • 举报
回复
i/=10; i在这里变成0了。然后i++又变成1了。
然后又变成0了。然后又变成1了



死循环。
pang123hui 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 djlxue 的回复:]
没看懂题意 怎么1-2之间有5个1?
[/Quote]

不好意思,是我写错了,是1个
djlxue 2010-02-03
  • 打赏
  • 举报
回复
没看懂题意 怎么1-2之间有5个1?
yzx714 2010-02-03
  • 打赏
  • 举报
回复
先不说你的代码。
我个想法是把每个数字转换成字符串了在数1比较好,大家的看法如何

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧