恳请新的解决方案关于C的入门问题。

a1320524944 2010-07-26 05:43:02
计算整数8461各位数之和(不是用代码来计算8+4+6+1)。

现在可以使用“ % ”取余和运算符“ / ”得出个位、十位、百位、千位数分别是几?

得出后再用算出个位+十位+百位+千位等于多少,用printf输出。

请用C来写,不是C++

写了一种办法如下:

int num = 8461;
int ge,shi,bai,qian;
ge=num%10;
shi=num/10%10;
bai=num/100%10;
qian=num/1000;
sum = ge+shi+bai+qian;
printf("%d各位数之间的和为:%d\n",num,sum);


希望能够有不同的办法,最好只用给出的“%”和“/”来解决。
...全文
70 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
laciqs 2010-07-26
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(void)
{
int num = 8461, sum = 0;

while (num) {
sum += num % 10;
num /= 10;
}

printf("各位数之和为:%d\n", sum);
return 0;
}
太乙 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a1320524944 的回复:]

引用 3 楼 hqin6 的回复:
C/C++ code
int fun(int num)
{
if (num < 10) return num;
return num%10 + fun(num/10);
}
int main()
{
printf("%d", fun(8641));
return 0;
}


你的这个办法很犀利啊 - - 能不能稍稍给我解释下?我是……
[/Quote]就是简单的递归而已,打个比方:
假如我要计算8641的各个位数和,则我只需要计算864这个数的各个位数和加上1即可

再比如:
我要计算123456789各个位的数字和,我只需要计算12345678这个数各个位的数字和,再加上个位9即可!

int fun(int num)---------这个函数就是计算各个位的数字和
{
if (num < 10) return num;--------对于小于10的,也就是说只有一位的,我直接返回本身
return num%10 + fun(num/10);---------对于大于10的,就像我刚才说的,个位数+其余数字之和。。。
}

当然,如ls所说,递归会影响速度的。。。
flysnowhite 2010-07-26
  • 打赏
  • 举报
回复
使用递归影响速度,最好改为迭代。
#include <stdio.h>
void main()
{
int a;
int s=0;
scanf(“%d”,&a);
while (a)
{ s+=a%10; a/=10;}
printf(“%d”,s);
}
a1320524944 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hqin6 的回复:]
C/C++ code
int fun(int num)
{
if (num < 10) return num;
return num%10 + fun(num/10);
}
int main()
{
printf("%d", fun(8641));
return 0;
}
[/Quote]

你的这个办法很犀利啊 - - 能不能稍稍给我解释下?我是个新手
太乙 2010-07-26
  • 打赏
  • 举报
回复
int fun(int num)
{
if (num < 10) return num;
return num%10 + fun(num/10);
}
int main()
{
printf("%d", fun(8641));
return 0;
}
yxqyrh 2010-07-26
  • 打赏
  • 举报
回复
你这只能算4位数的吧
难道规定了不能用循环吗?
太乙 2010-07-26
  • 打赏
  • 举报
回复
计算整数8461各位数之和(不是用代码来计算8+4+6+1)。

迷糊。。。。。。。。

70,037

社区成员

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

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