首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手帮小弟我这个代码分析下,尤其是第一个for循环

2012-03-15 
谁帮我这个代码分析下,尤其是第一个for循环int inv(int n){int a0,b1,c1for( b(n/10) b*10)for(

谁帮我这个代码分析下,尤其是第一个for循环
int inv(int n)
{
  int a=0,b=1,c=1;
  for(; b<=(n/10); b*=10);
  for(; b>0; b/=10,c*=10)
  a+=(n%(b*10)/b)*c;
  return a;
}

[解决办法]
for(; b<=(n/10); b*=10);
注意后面这个分号,这个for循环就是单纯的b=b*10,然后判断一下b<=n/10是否成立
比如n=12345,那么循环结束后b=10000
[解决办法]
第1个循环 将b变成小于等于n/10的10的倍数。 

[解决办法]

C/C++ code
for(; b<=(n/10); b*=10);//加分号,是空语句。只根据条件循环。b一直自乘10,直到条件b<=(n/10)。//2个for 非嵌套for(; b>0; b/=10,c*=10)//此时b的值已在上句循环中改变。{ a+=(n%(b*10)/b)*c;}
[解决办法]
第一个for循环如果b小于等于n的十分之一,则将其放大到大于n的十分之一的某个值。例如n=100时,其运行过程如下
step 1: b=1, b<=10成立,b=10;
step 2: b=10, b<=10成立,b=100;
step 3: b=100, b<=10不成立,跳出循环,最终b=100。
第二个for循环类似第一个。
然后就是一个简单表达式了。
[解决办法]
for(; b>0; b/=10,c*=10)
a+=(n%(b*10)/b)*c;
这个for循环是将n倒置输出,假如n=12345,那么a=54321
[解决办法]
分析程序前,首先观测: b只有*10和/10的操作,c也是,注意的是b和c的初始值是1,所以b可能的值为1,10,100,c也类似。

a存储结果,初始值为0.


好了,开始分析程序。

for(; b<=(n/10); b*=10)
;

b会一直*10,一直到b>n/10为止。这就很简单了。假设n是一个4位数,这个for循环之后,b就是1000。假设n是一个5位数,这个for循环之后,b就是10000,以此类推,假设n是一个x位数,b就是10^(x-1)

下面,
for(; b>0; b/=10,c*=10)
a+=(n%(b*10)/b)*c;

很容易看懂了,就是把n的首位数取出来*1+n的第二位数字取出来*10+...

其实就是把1234变成4321。

热点排行