在线 求解 一个用递归 的算法

chgq456 2008-11-09 11:17:30
比如 有一个 int a = 318
求它的每个数相加 一直到 结果是一个个位数
就象这样的 3+1+8 = 12 ; 1+2 = 3; 3就是要求的结果
...全文
130 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Han_Xiang 2008-11-12
  • 打赏
  • 举报
回复
LZ,一楼和你写的代码都是错的,你看出来没有。
aidingbao1019 2008-11-10
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

/*比如 有一个 int a = 318
*求它的每个数相加 一直到 结果是一个个位数
*就象这样的 3+1+8 = 12 ; 1+2 = 3; 3就是要求的结果
*/
int Add(int num)
{
int rvalue=0;
if(num/10!=0)
{
rvalue=num%10;
return Add(num=Add(num=num/10)+rvalue);
}
else
return num;

}
int main()
{
int num=975;
int rvalue=Add(num);
cout<<rvalue<<endl; //输出3
system("pause");
}
Han_Xiang 2008-11-10
  • 打赏
  • 举报
回复
corrected:
int  fun(int  a) 
{
int c = 0;

do
{
c += a % 10;
a /= 10;
} while(a > 0);

return c < 10 ? c : fun(c);
}
xuedaoli 2008-11-10
  • 打赏
  • 举报
回复
写的精练简单的,或许是比较难理解的。
要看你对代码的要求了,是要效率呢,易懂呢,还是其他,恰当选择
锋妍踏雪 2008-11-10
  • 打赏
  • 举报
回复

/************************************************
函数说明:
比如 有一个 int a = 318
求它的每个数相加 一直到 结果是一个个位数
就象这样的 3+1+8 = 12 ; 1+2 = 3; 3就是要求的结果
*************************************************/
#include <iostream>
using namespace std;

char* Sum( char *str )
{
if(strlen(str)==1)
return str;
else
{
for(int i = 0,sum = 0; str[i]; sum += str[i]-48, ++i );
itoa( sum, str, 10);
return Sum(str);
}
}

void main()
{
int a = 318;
char b[10];
itoa( a, b, 10 );

cout << Sum(b) << endl;
}
Han_Xiang 2008-11-09
  • 打赏
  • 举报
回复
#include  <iostream>

using namespace std;

int fun(int num)
{
if (num < 10)
{
return num;
}

int res = 0;

while (num > 0)
{
res += num % 10;
num /= 10;
}

// cout << res << endl;

return fun(res);
}

int main()
{
int N;

cin >> N;

cout << fun(N) << endl;

// system("PAUSE");

return 0;
}
太乙 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chgq456 的回复:]
int fun(int a)
{
int c = 0;
do
{
c += a%10;
a /= 10;
}
while(a < 10);
return c <10 ? c : fun(c);
}

这是我写的


我以前看过 飞雪 写过 想不起来他是怎么写的

他写得很简单的 一种递归
[/Quote]

理解意思就行!
chgq456 2008-11-09
  • 打赏
  • 举报
回复
int fun(int a)
{
int c = 0;
do
{
c += a%10;
a /= 10;
}
while(a < 10);
return c<10 ? c : fun(c);
}

这是我写的


我以前看过 飞雪 写过 想不起来他是怎么写的

他写得很简单的 一种递归
太乙 2008-11-09
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int fun(int num)
{
if(num<10) return num;
int res=0;
while(num>=10)
{
res += num/10;
num/=10;
}
return fun(res);
}
void main()
{
cout<<fun(318)<<endl;
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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