c语言,输入两个整数n和m,输出1到n所有除以m后的商正好是它的每位数字平方和的数。n和m不超一万

输出的每五个数占一行,用tab分隔,最后一个整数后为换行符。

可以这样理解——

#include "stdio.h"
int main(int argc,char *argv[]){
int n,m,m2,i,k;
  printf("Please enter n & m(int 0<m,n<10000)...\n");
  if(scanf("%d%d",&n,&m)!=2 || m<1 || m>9999 || n<1 || n>9999){
    printf("Input error, exit...\n");
    return 0;
  }
  for(m2=0,i=m;i;m2+=(i%10)*(i%10),i/=10);
for(k=0,i=m*m2;i<=n;i+=m)
if(i/m==m2)
printf(++k%5 ? "%d\t" : "%d\n",i);
printf(k%5 ? "\n" : !k ? "Didn't find this number...\n" : "");
return 0;
}

运行样例:

也可以这样理解——

#include "stdio.h"
int main(int argc,char *argv[]){
int n,m,m2,i,k,t;
printf("Please enter n & m(int 0<m,n<10000)...\n");
if(scanf("%d%d",&n,&m)!=2 || m<1 || m>9999 || n<1 || n>9999){
printf("Input error, exit...\n");
return 0;
}
for(k=0,i=m;i<=n;i+=m){
for(m2=0,t=i;t;m2+=(t%10)*(t%10),t/=10);
if(i/m==m2)
printf(++k%5 ? "%d\t" : "%d\n",i);
}
printf(k%5 ? "\n" : !k ? "Didn't find this number...\n" : "");
return 0;
}

运行样例:

哪种理解是正确的?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-22
#include<stdio.h>
int sumNum(int num){
int sum = 0,temp;
while(num!=0){
temp=num%10;
sum+=(temp*temp);
num/=10;
}
return sum;
}
void main(){
int m,n,i,count=0;
printf("请输入m和n的值(m和n的值必须不大于10000):");
scanf("%d,%d",&m,&n);
while(m>10000||n>10000){
printf("必须输入一个小于10000的值!\n\n");
printf("请输入m和n的值(m和n的值必须不大于10000):");
scanf("%d,%d",&m,&n);
}
for(i=1;i<=n;i++){
if(i/m==sumNum(i)){
count++;
if(count%5==0){
printf("%d\n",i);
}else{
printf("%d\t",i);
}
}else if(count==0){
printf("没有满足条件的数字!\n");
break;
}
}
}
第2个回答  2018-10-22
一、基本方法: 1、输入M和N; 2、遍历从M到N的所有整数; 3、每个累加; 4、输出结果。参考代码: #include int main(){ int M,N,n,s=0; scanf("%d%d",&M,&N);//输入 for(n = M; n <= N; n ++)//遍历 s+=n;//累加每个整数。 printf("%d\n",s);//输出结果。 return 0;} 二、利用等差数列求和公式。从M到N的所有整数为等差数列,公差为1,所以可以利用求和公式直接获得结果。 #include int main(){ int M,N,n,s=0; scanf("%d%d",&M,&N);//输入 s=(M+N)*(N-M+1)/2;//等差数列求和。 printf("%d\n",s);//输出结果。 return 0;} 三、方法对比: 第一种适用于C语言练习,可以涉及更多知识点。第二种方法效率更高,适用于实际应用。本回答被网友采纳
相似回答