一个简单的小程序。。看不明白 ,求帮忙

baiye1134 2010-04-23 04:36:40
#include <stdio.h>
int main()
{
long n;
printf("Enter a number: \n");
scanf("%d",&n);
int a[20], digitCnt = 0, i = 0;
while(n) {
a[digitCnt] = n % 10;
n = (n - a[digitCnt])/10;
++digitCnt; //计算位数
}
for(i = digitCnt - 1; i >= 0; --i) //1
printf("%d ",a[i]);//顺序输出 //2
printf("\n");
return 0;
}
别人帮写的,可是我后面标的1和2 那两行,我看不懂,我不明白为什么他是顺序输出的,我个人觉得应该是倒着输出的,为什么会是正着输的呢,按说,应该是i从计数长度的最大值开始慢慢减小直到1,那printf的时候不就也该那样吗?
...全文
115 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiye1134 2010-04-23
  • 打赏
  • 举报
回复
哦哦哦。。我了我了。。谢谢各位!
yidasoft 2010-04-23
  • 打赏
  • 举报
回复
对,倒序输出!
huanmie_09 2010-04-23
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>

int main()
{
long n;
printf("Enter a number: \n");
/*scanf("%d",&n);*/ /*长整型对应的输入格式控制为"%ld"*/
scanf("%ld",&n);
int a[20], digitCnt = 0, i = 0;

while(n) {
a[digitCnt] = n % 10; /*将n的个位上的数保存到数组a, 这样个位上的数保存到数组低位*/
/*n = (n - a[digitCnt])/10;*/
n = n/10; /*放弃个位上的数, 以进行下一次分离*/
++digitCnt; /*数组长度加1*/
}

for(i = digitCnt - 1; i >= 0; --i) /*数组倒序输出*/
printf("%d ",a[i]);
printf("\n");
return 0;
}
jinpengxx8 2010-04-23
  • 打赏
  • 举报
回复
%是取余数...
a[digitCnt]是取第一个余数,比如输入的数是1234567
则a[0]是7
a[8]是1
所以应该从a[8]到a[0]的输出
zuiyuezhou888 2010-04-23
  • 打赏
  • 举报
回复
别人写的就是倒序输出的啊 从a[digital-1]到a[0] 也就是从最后一个到第一个 楼主可以运行一下仔细看看
poppoo1986 2010-04-23
  • 打赏
  • 举报
回复
while(n) {
a[digitCnt] = n % 10; // n对10取余 也就是 a[1] = n的个位 //这里手滑了 应该是a[0]
n = (n - a[digitCnt])/10; // 减去个位除以10 等下次循环 就得到百位
++digitCnt; //计算位数
}


所以a[i] 是从个位开始存的,所以得倒着输出。


有点错误,不好意思
poppoo1986 2010-04-23
  • 打赏
  • 举报
回复
while(n) {
a[digitCnt] = n % 10; // n对10取余 也就是 a[1] = n的个位
n = (n - a[digitCnt])/10; // 减去个位除以10 等下次循环 就得到百位
++digitCnt; //计算位数
}


所以a[i] 是从个位开始存的,所以得倒着输出。
xiuxianshen 2010-04-23
  • 打赏
  • 举报
回复
晕,人家就是按你说的那么做的,看代码,别纠缠注释
for循环不就是逆序输出的么
northwesternwind 2010-04-23
  • 打赏
  • 举报
回复
保存时候末位数保存在数组最前面,所以循环要倒着来.

69,382

社区成员

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

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