关于回文数和完全数的求解答!!!谢谢各位大侠!!

jessese 2004-11-09 12:42:41
1。求0~~20000的所有完全数,编写C++程序!完全数是恰好是因子的和!
例如6=1+2+3,28=1+2+4+7+14

2.求0~20000的所有回文数,编写C++程序!回文数例如:12321,121,23432等等!
...全文
297 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jessese 2004-11-12
  • 打赏
  • 举报
回复
up!
dean456789 2004-11-12
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int i,sum;
int ws(int i);
void main()
{
for(i=1;i<=20000;i++)
{
sum=0;
ws(i);
if(sum==i)
cout<<i<<"是完数"<<endl;
}
}
int ws(int i)
{
int m;
for(m=1;m<i;m++)
{
if(i%m==0)
sum+=m;
}
return (sum);
}\\完数
dean456789 2004-11-12
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
bool symm(long n)
{
long i, m;
i=n ; m=0 ;
while(i)
{
m=m*10+i%10;
i=i/10 ;
}
return ( m==n );
}
void main()
{
bool symm(long n);
long m;
for(m=11; m<20000; m++)
if (symm(m))
cout<<"m="<<m<<endl;
}//回文数
g8y 2004-11-11
  • 打赏
  • 举报
回复
学习
jessese 2004-11-11
  • 打赏
  • 举报
回复
up!
wikiexe 2004-11-11
  • 打赏
  • 举报
回复
to xuzheng318(forever C++) (老迈马甲NO.1)(学如逆水行舟,不进则退)
请问这段代码什么要加入到程序中,我觉得应该把它去掉才正确
for(i=1;i<k;i++) //找出不相等的公因子的乘积
{
int temp=gene[i]*gene[i+1];
for(j=i+1;j<n+1;j++)
{
if(temp>=number) {flag=0;break;}
if(temp==gene[j]) flag=0;
}
if(flag==0)
{
flag=1;
continue;
}
if(flag==1)
{
gene[n]=temp;
n++;
}
}
dick4610 2004-11-10
  • 打赏
  • 举报
回复
同意 xuzheng318(forever C++) 的
jessese 2004-11-10
  • 打赏
  • 举报
回复
简单的问题有最佳的求解方式也是个好的思维过程!谢谢大家的指教!
觉得简单的大侠也请献技。。。
Squall1009 2004-11-09
  • 打赏
  • 举报
回复
.......
都没什么难度,自己想一下就能写了,
为什么不自己动手呢?
wikiexe 2004-11-09
  • 打赏
  • 举报
回复
程序的结果应该与i的初始值没有关系呀
那么为什么i初始值为6时就能输出28
而i初始值为25时就只能输出30?
xuzheng318 2004-11-09
  • 打赏
  • 举报
回复
因为25就不是完全数!
wikiexe 2004-11-09
  • 打赏
  • 举报
回复
to xuzheng318(forever C++) (老迈马甲NO.1)(学如逆水行舟,不进则退)

请问为什么你的程序中把
for(int i=6;i<=MAX;i++)
改成
for(int i=25;i<=MAX;i++)

结果就不对了呢?
goodluckyxl 2004-11-09
  • 打赏
  • 举报
回复
想了想第二不需要用 容器
这样比较简单
#include <iostream>
using namespace std;

void main()
{

char IntToChar[10] = {0}, CharToInt[10] = {0};
int iCharToInt = 0, iCharNumber = 0, InputNum = 0;

cout<<"请输入要测试的:"<<endl;
cin>>InputNum;

for( int i = 0; i < InputNum; i++ )
{
memset( IntToChar, 0, 10 );
memset( CharToInt, 0, 10 );
itoa( i, IntToChar, 10 );
iCharNumber = strlen(IntToChar);
for( int j = 0; j < iCharNumber; j++ )
CharToInt[j] = IntToChar[iCharNumber-1-j];
iCharToInt = atoi(CharToInt);

if( iCharToInt == i )
cout<<i<<"是回数"<<endl;

}
}
yangfasheng 2004-11-09
  • 打赏
  • 举报
回复
自己试着写写看吧,
xuzheng318 2004-11-09
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"

int check( char *str ); // 检查是否回文

int main()
{
int n;
char str[5];
for( n = 0; n<20000; ++n ) {
sprintf( str, "%d", n ); // 格式化为字符串
if( check( str ) ) // 输出回文
puts(str);
}

return 0;
}

int check( char *str )
{
int i, len, loop;
int res = 1;

len = strlen( str );
if( len == 1 )
return 1;

loop = len / 2; // 不用分奇偶数,因为奇数时,中间一个字符不用比较
for( i=0; i<loop; ++i ) {
if( str[i] != str[len-i-1] ) {
res = 0;
break;
}
}

return res;
}
goodluckyxl 2004-11-09
  • 打赏
  • 举报
回复
第二个 也是比较简单 写了看看
#include <iostream>
#include <vector>
using namespace std;

void main()
{
vector<char> SecondInstance;
vector<char>::iterator it;
char IntToChar[10] = {0};
int iCharNumber = 0;
int InputNum = 0;
cout<<"请输入要测试的:"<<endl;
cin>>InputNum;

for( int i = 0; i < InputNum; i++ )
{
memset( IntToChar, 0, 10 );
itoa( i, IntToChar, 10 );
iCharNumber = strlen(IntToChar);
for( int j = 0; j < iCharNumber; j++ )
SecondInstance.push_back(IntToChar[j]);

for( j = iCharNumber-1, it = SecondInstance.begin(); j >= 0; j--, it++ )
if( *it != IntToChar[j] )
break;
if( j == -1)
cout<<i<<"是回数"<<endl;
SecondInstance.clear();
}


}
xuzheng318 2004-11-09
  • 打赏
  • 举报
回复
#define MAX 10000
#include <iostream.h>

int search_g(int number,int gene[MAX]) //查找最小公因子
{
int i,j,k,n,flag=1;
n=number/2;
k=0;
for(i=1;i<=n;i++)
{
if(number%i==0)
{
gene[k]=i;
k++;
}
}
n=k;

for(i=1;i<k;i++) //找出不相等的公因子的乘积
{
int temp=gene[i]*gene[i+1];
for(j=i+1;j<n+1;j++)
{
if(temp>=number) {flag=0;break;}
if(temp==gene[j]) flag=0;
}
if(flag==0)
{
flag=1;
continue;
}
if(flag==1)
{
gene[n]=temp;
n++;
}
}
return(n);

}

void main()
{
int n,gene[MAX],num,sum;
for(int i=6;i<=MAX;i++)
{
sum=0;
num=i;
n=search_g(num,gene);
for(int j=0;j<n;j++)
sum=sum+gene[j];
if(num==sum)
cout<<num<<endl;
}
}
2~10000之内的所有完全数
fallhunter 2004-11-09
  • 打赏
  • 举报
回复

这个都要问么
自己写写看吧,不难
goodluckyxl 2004-11-09
  • 打赏
  • 举报
回复
第一个随手写了下
可以用
#include <iostream>
#include <set>
using namespace std;

void main()
{
set<int> FirstInstance;
set<int>::iterator it;
int InputNum = 0;
cout<<"请输入要测试的数:"<<endl;
cin>>InputNum;
int iResult = 0 ;
for( int i = 1; i < InputNum; i++ )
{
if( !(InputNum%i) )
{
if( FirstInstance.empty() )
{
FirstInstance.insert(i);
iResult += i;
}
else if( FirstInstance.find(i) == FirstInstance.end() )
{
FirstInstance.insert(i);
iResult += i;
}
}
}

if( iResult == InputNum )
cout<<InputNum<<"是完全数"<<endl;
else
cout<<InputNum<<"不是完全数"<<endl;
}

64,637

社区成员

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

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