C语言求互满数

C语言求互满数,第1张

1楼写的那个函数不是计算一个数约数之后,而是计算不是约数之和的,不要混淆了;

有个解法,不过很耗时(相当耗时)

//环境: VC6.0; 运行平台: XPSP2

#include <iostream>

using namespace std

int main()

{

int ysSum(int x)

for(int i=1i<=30000i++)

for(int j=ij<=30000j++)

{

if( ( ysSum(i)!=j ) || ( ysSum(j)!=i ))

continue

else

cout<<i<<" "<<j<<endl

}

return 0

}

int ysSum(int x)//计算一个没好数的约数和

{

int sum=0

for(int i=1i<xi++)

{

if(x%i==0) sum+=i

}

return sum

}

这个程序估计20分钟也算不完;

也有效率更好的算法:

#include <iostream>

using namespace std

int main()

{

int ysSum(int x)

int temp

for(int i=1i<=30000i++)

{

temp=ysSum(i)//计算i的约数和

if(temp>30000) //temp不能大于30000

continue

if(ysSum(temp)==i) //如果temp的约数枯闷铅和等于i,

// 则是我们要的

cout<<i<<" "<<temp<罩慎<endl

}

return 0

}

int ysSum(int x)

{

int sum=0

for(int i=1i<xi++)

{

if(x%i==0) sum+=i

}

return sum

}

例3:用早基袜σ(m)表示数m的所有因子(包括1和m在内)之...如果m<n,且σ(m)=σ(n)=m+n+1,则数对(m,n)是拟互满数。下列程序的功能是找出40--2000之间的所有陆激拟互满数,并将运算结果按图锋消3给出的格式

显示在文本框Text1中。...

二:

1.该程序的运行结果是 :10 9

解答:x--表示先取x的值再自减1;--y表示先减1再取用y的值。

2.该程序的运行结果是 :s=9

就是两层循环嘛,当j=1时,k从1循环到j计算下s的值;

当j=2时,k从1循环到j计算下s的值

当j=3时,k从1循环到j计算下s的值

3.该程序的运行结果是 :1,5

该程序定义p指针指向数组,

p=a表示 p指向a的首地址即a[0]

*(p+2)即a[2],因为a[2]=3,*(p+2)+=2表示自增2即5;

4.该程序的运行结果是 :18

同上题,只是p现在指向a[1]

5.该程序的运行汪饥结果是 :40

a[5],5个元素的数组,在循环中;当K=0,a[0]=10*0当K=1,a[1]=10*1

以此类推;当K=5时结束循环;所以输出a[k-1]即a[4]=40.

三:

1.√

2.Ⅹ 数据类型分:基本类型 构造类型 指针类型 空类型;

基本里包括整型,字符型,浮点型,枚举型

构造里包括数组,结构体,公用体

3.Ⅹ 从0开始

4.√

5.Ⅹ getchar函数从键盘输入缓冲区里面取一个字符作为函数结果返回

6.√

7.Ⅹ 数组中只能有一种类型;若有包含多种类型则需用结构体

8.Ⅹ 还有 charshort unsigned int long intunsigned long int

double long double 等。

9.Ⅹ 满足循环退出条件即可,也可用breakcontinue等语句

10.Ⅹ 跳出循环体.

四:

你不编了吗?在if语句后面再加上n[b]='\0'(即加个结束符)然后再添个困漏返输出语句:

for(a=0a<ba++)

printf("%d",b[a])

我也是搜胡学C不久有些地方可能有错哦!大家都互相帮助嘛^-^


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12303811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存