一个正整数的复杂度定义为每一位数字求和,如134的复杂度为8,4330的复杂度为10。
现输入一组正整数(以空格隔开各数,一组正数据有5个数,按回车键结束该组数字输入),请输出其中最大的复杂度以及对应的数;如复杂度相同,则输出数值最大的。程序应能多次输入数字组,输入任意非数字键后程序退出。
一个有点复杂的实现,供参考:
#include <stdio.h>
//计算复杂度
int calculateComplex(int num){
int complex=0;
int position;
while(num!=0){
position=num%10;//用求10的余获取num各位的值
complex+=position; //累积每个数位的值到复杂度变量
num=num/10; //num除以10,以便下一次获取下个数位的值
}
return complex;
}
int main(void){
int num[6];
int i=0,j,k;
int get=0; //每轮输入获取到了几个数字
int over=0; //循环退出标记
int result; //复杂度最高并且值最大的数
int maxcomplex=0; //最高的复杂度变量
// scanf("%d",&i);
// printf("%d\n",calculateComplex(i));
//
printf("请输入5个正整数:\n");
while(over==0){ //如果达到不到退出要求,则一直循环
while(get!=5){ //如果没有获取到5个整数,就一直获取
// printf("get=%d,i=%d\n",get,i);
j = scanf("%d",&num[i]);
if(j==1){ //如果获取到一个整数,则get+1
get++;
i++; //开始获取下一个整数
}
}
for(k=0;k<5;k++){
// printf("2\n");
//如果和复杂度最高一样,则获取值最大的数
int tempcomplex=calculateComplex(num[k]);
if(tempcomplex==maxcomplex){
if(result<num[k]){
result=num[k];
}
continue; //开始下一轮判断
}
//求复杂度更高的数
if(tempcomplex>maxcomplex){
maxcomplex=tempcomplex;
result=num[k];
}
}
//打印此轮比较结果
printf("复杂度最大的数是:%d, 它的复杂度是:%d.\n",result,maxcomplex) ;
//开始下一轮五个数的复杂度判断,标记和小标再次初始化
maxcomplex=0;
i=0;
printf("请输入5个正整数:\n");
j=scanf("%d",&num[i]);
i++;
// printf("3\n");
if(j==0){ //如果输入了非数字字符,退出
over=1;
}else{
get=1;
}
}
printf("程序退出!\n");
}