题目描述
编写一个程序,从键盘输入n个非零整数(0<n<1000),将这n个数中各位数字取出来相加,并按照从小到大的次序依次输出这些数字和。例如,497的各位数字和为20(4+7+9),1069的各位数字和为16(1+0+6+9)。
输入格式
输入的整数之间以空格分隔,输入为0时结束。
输出格式
在一行上从小到大输出计算结果,整数之间用1个空格分隔,最后换行。
输入样例
497 1069 68 71 137 0
输出样例
8 11 14 16 20
C语言实现
算法基本思想:从键盘上输入整数,计算其各位数字之和,并存入数组,最后对数组进行排序。
#include<stdio.h>
int sumOfEveryBit(int num); //求num的各位数字相加的和
void bubbleSort(int *arr,int length); //对数组进行冒泡排序
void main()
{
int num[1000];
int length = 0;
int tmp;
scanf("%d",&tmp);
while (tmp != 0)
{
num[length++] = sumOfEveryBit(tmp);
scanf("%d",&tmp);
}
bubbleSort(num,length); //数组排序
int i;
for(i=0; i<length; i++)
{
printf("%d ",num[i]);
}
printf("\n");
return 0;
}
int sumOfEveryBit(int num)
{ //求num的各个位数字相加的和
int ans=0;
while(num/10)
{
ans += num%10;
num /= 10;
}
ans += num;
return ans;
}
void bubbleSort(int *arr,int length)
{ //对数组进行冒泡排序
int i,j;
for(i=0; i<length-1; i++)
{
for(j=0; j<length-i-1; j++)
if(arr[j]>arr[j+1]){
int a = arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}