C言語関係掲示板

過去ログ

No.475.4桁の整数を降順に並べた数と、昇順に並べた数の差

[戻る] [ホームページ]
No.3431

教えてください
投稿者---Gackt(2002/11/12 16:34:51)


4桁の整数で、各桁を大きい順に並び替えた数と、小さい順に並び替えた数を作り、その差を計算するプログラムを作りたいのです。自分でせずに、コンピュータにしてもらいたいのです。どうすればいいのですか。

例 8659
 
  9865−5689=4176

という感じです。

No.3432

Re:教えてください
投稿者---test(2002/11/12 17:37:50)


#include <stdio.h>
#include <stdlib.h>

int sort_a(int );
int sort_b(int );
/*****************************************************************************/
/* 関数名: main																 */
/* 引数  : なし																 */
/* 戻り値: なし																 */
/* 書式  : void main(void)													 */
/*****************************************************************************/
void main(void)
{
	int		input;
	int		result;
	
	printf("4桁の整数をしてください\n");
	printf("昇順と降順にソートした後、大きい数と小さい数の差を求めます\n");
	scanf("%d",&input);
	
	result = sort_a(input) - sort_b(input);
	
	printf("%d\n",result);
	
}
/*****************************************************************************/
/* 関数名: sort_a															 */
/* 引数  : 4桁の整数														 */
/* 戻り値: 引数で与えられた4桁の整数を降順に並び替えた値					 */
/* 書式  : int sort_a(int input)											 */
/* 機能  : 引数で与えられた4桁の整数を降順に並び替える						 */
/*****************************************************************************/
int sort_a(int input)
{
	char	buf[5];
	char	temp;
	int		i;
	int		j;
	
	sprintf(buf,"%d",input);
	
	
	i = 0;
	while(i < 4)
	{
		j = i + 1;
		while(j < 4)
		{
			if(buf[i] <= buf[j])
			{
				temp = buf[i];
				buf[i] = buf[j];
				buf[j] = temp;
			}
			j++;
		}
		i++;
	}
	return(atoi(buf));
}
/*****************************************************************************/
/* 関数名: sort_b															 */
/* 引数  : 4桁の整数														 */
/* 戻り値: 引数で与えられた4桁の整数を昇順に並び替えた値					 */
/* 書式  : int sort_b(int input)											 */
/* 機能  : 引数で与えられた4桁の整数を昇順に並び替える						 */
/*****************************************************************************/
int sort_b(int input)
{
	char	buf[5];
	char	temp;
	int		i;
	int		j;
	
	sprintf(buf,"%d",input);
	
	
	i = 0;
	while(i < 4)
	{
		j = i + 1;
		while(j < 4)
		{
			if(buf[i] >= buf[j])
			{
				temp = buf[i];
				buf[i] = buf[j];
				buf[j] = temp;
			}
			j++;
		}
		i++;
	}
	return(atoi(buf));
}


No.3435

Re:教えてください
投稿者---かずま(2002/11/12 19:17:17)


> 4桁の整数で、各桁を大きい順に並び替えた数と、小さい順に並び替えた数を
> 作り、その差を計算するプログラム
#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b)
{
    return *(int*)a - *(int *)b;
}

int main(void)
{
    int a[4];

    while (printf("4 digits? "),
            scanf("%1d%1d%1d%1d", a, a+1, a+2, a+3) == 4) {
        qsort(a, 4, sizeof(int), compare);
        printf("  %d\n", 999*(a[3]-a[0]) + 90*(a[2]-a[1]));
    }
    return 0;
}