大学c语言编程中的一个简单问题,跪求大神来解决下,谢谢 80
找出满足条件的四位数abcd与e,a非0,e非0非1,使四位数满足abcd*e=dcba,,,,答案如下#include<stdio.h>voidmain(){inti,...
找出满足条件的四位数abcd与e,a非0,e非0非1,使四位数满足abcd*e=dcba,,,,答案如下
#include<stdio.h>
void main()
{
int i, e, n, num, flag;
for(i = 1000; i < 10000; i++)
{
for(num = 0, flag = 1000, n = i; n; n=n/10, flag=flag/10) //取数dcba
num =num+ ((n % 10) * flag);
for(e = 2; e < 10; e++) //判断是否存在abcd*e=dcba
if(i *e == num)
printf("abcd(%d) * e(%d)=dcba(%d)\n", i, e, num); //输出
}
}
我想请问诸位大神,
for(num = 0, flag = 1000, n = i; n; n=n/10, flag=flag/10) //取数dcba
num =num+ ((n % 10) * flag);
到底有啥用。求最详细的对这一句话的分析,小弟跪谢 展开
#include<stdio.h>
void main()
{
int i, e, n, num, flag;
for(i = 1000; i < 10000; i++)
{
for(num = 0, flag = 1000, n = i; n; n=n/10, flag=flag/10) //取数dcba
num =num+ ((n % 10) * flag);
for(e = 2; e < 10; e++) //判断是否存在abcd*e=dcba
if(i *e == num)
printf("abcd(%d) * e(%d)=dcba(%d)\n", i, e, num); //输出
}
}
我想请问诸位大神,
for(num = 0, flag = 1000, n = i; n; n=n/10, flag=flag/10) //取数dcba
num =num+ ((n % 10) * flag);
到底有啥用。求最详细的对这一句话的分析,小弟跪谢 展开
4个回答
展开全部
这个其实很简单的:
我举个例子来说明好了
当i=1234时,
第一次循环:1)赋值num=0,flag=1000,n=1234
计算num=num(第一次是0)+1234%10取余得4 * 1000=4000
2)判断,这里不进行判断,只有一个n
3)n=n/10=123(这里不是123.4,注意是整形)
第二次循环:1)这时候num=4000,flag=100,n=123
计算num=num(4000)+123%10取余3 *100=4000+300=4300
2)判断,这里不进行判断,只有一个n
3)n=n/10=123(这里不是123.4,注意是整形)
看出来了吗?就是把每一位拿出来,倒着输出~~~
我举个例子来说明好了
当i=1234时,
第一次循环:1)赋值num=0,flag=1000,n=1234
计算num=num(第一次是0)+1234%10取余得4 * 1000=4000
2)判断,这里不进行判断,只有一个n
3)n=n/10=123(这里不是123.4,注意是整形)
第二次循环:1)这时候num=4000,flag=100,n=123
计算num=num(4000)+123%10取余3 *100=4000+300=4300
2)判断,这里不进行判断,只有一个n
3)n=n/10=123(这里不是123.4,注意是整形)
看出来了吗?就是把每一位拿出来,倒着输出~~~
展开全部
for(num = 0, flag = 1000, n = i; n; n=n/10, flag=flag/10){
num =num+ ((n % 10) * flag);
}中循环的条件是n=n/10, flag=flag/10,已至最外层循环每一次运行时 n=i,flag=1000;
所以这个循环会运行4次,每次flag分别为1000,100,10, 1;而n 为n, n/10,n/100,n/100,
所以(n%10)*flag分别为(n%10)*1000, (n/10%10)*100, (n/100%10)*10 ,(1/1000%10)*1
-- /代表取整, %代表取余数
--(n%10表示个位d),*1000 即将个位转成千位,
--(n/10%10表示十位c),*100 即将十位转成千位,
--(n/100%10表示十位b),*10 即将百位转成十位,
--(n/1000%10表示十位a),*1 即将千位转成个位。
num =num+ ((n % 10) * flag);
}中循环的条件是n=n/10, flag=flag/10,已至最外层循环每一次运行时 n=i,flag=1000;
所以这个循环会运行4次,每次flag分别为1000,100,10, 1;而n 为n, n/10,n/100,n/100,
所以(n%10)*flag分别为(n%10)*1000, (n/10%10)*100, (n/100%10)*10 ,(1/1000%10)*1
-- /代表取整, %代表取余数
--(n%10表示个位d),*1000 即将个位转成千位,
--(n/10%10表示十位c),*100 即将十位转成千位,
--(n/100%10表示十位b),*10 即将百位转成十位,
--(n/1000%10表示十位a),*1 即将千位转成个位。
追问
请问这个循环终止条件是什么?
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
功能就是把num变成dcba
(n % 10) * flag是先把要判断的数取个位数,然后乘以flag移到高位;
n=abcd先取个位数d,乘以flag=1000后d移到最高位,num=d000;
然后n=abc取个位数c,乘以flag=100后c移到最高位,num=dc00;
n=ab取个位数b,乘以flag=10后b移到最高位,num=dcb0;
n=a,乘以flag=1后c移到最高位, num=dcba;
(n % 10) * flag是先把要判断的数取个位数,然后乘以flag移到高位;
n=abcd先取个位数d,乘以flag=1000后d移到最高位,num=d000;
然后n=abc取个位数c,乘以flag=100后c移到最高位,num=dc00;
n=ab取个位数b,乘以flag=10后b移到最高位,num=dcb0;
n=a,乘以flag=1后c移到最高位, num=dcba;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比如1234,1回合:num=0+4×1000=4000
2回合,n为123,flag为100
所以num=4000+3×100=4300
同理可得num最后为4321
2回合,n为123,flag为100
所以num=4000+3×100=4300
同理可得num最后为4321
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询