问题:从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。先后输入两个正整数m和n,用逗号分隔,输出所有完数,每两个数之间用逗号分隔。若输入非法,则输出“error”
代码
#include<stdio.h>
int main(){
int m,n,t,sum,i;
scanf("%d,%d",&m,&n);
if(m>0&&m<=9999&&n>0&&n<=9999){
if(m>n){
t=m;
m=n;
n=t;
}
for(;m<=n;m++){
sum=0;
for(i=1;i<m;i++){
if (m%i==0)
sum=sum+i;
}
if(sum==m)
printf("%d,",m);
}
}
else
printf("error\n");
return 0;
}
运行结果
输入:1,2000
输出:6,28,496,
尝试用printf"\b"消去最后一个逗号,但本质上还是存在
我想要达到的结果
输入:1,2000
输出:6,28,496
#include<stdio.h>
int main(){
int m,n,t,sum,i,count=0;
scanf("%d,%d",&m,&n);
if(m>0&&m<=9999&&n>0&&n<=9999){
if(m>n){
t=m;
m=n;
n=t;
}
for(;m<=n;m++){
sum=0;
for(i=1;i<m;i++){
if (m%i==0)
sum=sum+i;
}
if(sum==m){
if(count==0)
printf("%d",m);
else
printf(",%d",m);
count++;
}
}
}
else
printf("error\n");
return 0;
}
可以用一个计算器来计算有多少个完数了,如果到相应区间最后一个完数,则不输出逗号,不知道是不是你想要的那种效果,如下:
#include<stdio.h>
int main(){
int m,n,t,sum,i;
scanf("%d,%d",&m,&n);
int num=0;
int mtemp,ntemp;
int index=0;
if(m>0&&m<=9999&&n>0&&n<=9999){
if(m>n){
t=m;
m=n;
n=t;
}
mtemp = m;
ntemp = n;
for(;m<=n;m++){
sum=0;
for(i=1;i<m;i++){
if (m%i==0)
sum=sum+i;
}
if(sum==m)
num++;
}
m=mtemp;
n=ntemp;
for(;m<=n;m++){
sum=0;
for(i=1;i<m;i++){
if (m%i==0)
sum=sum+i;
}
if(sum==m){
index++;
if(index<num){
printf("%d,",m);
}else{
printf("%d",m);
}
}
}
}
else
printf("error\n");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!