challenge 与えられた数字のケタ数

与えられた数字のケタ数と、最大桁の位を求めてください。
数字が2469なら4桁で最大桁は1000の位です。
600なら3と100、1なら1と1です。

このお題はsusuさんの投稿です。ご投稿ありがとうございます。

Posted feedbacks - C

0が入力されたときは、 ケタ数1、最大桁の位1で良かったでしょうか。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <math.h>

int main()
{
    unsigned long input_data;
    int           digit;

    printf("正の整数を入力してください : ");
    scanf("%ld", &input_data);

    /* 0と入力されたとき対策 */
    if (input_data != 0) {
        digit = 0;
    }
    else {
        digit = 1;
    }

    while (input_data > 0) {
        input_data /= 10;
        digit++;
    }

    printf("ケタ数     : %d\n", digit);
    printf("最大桁の位 : %d\n", (int)pow(10, digit-1));

    return 0;
}

まず使う機会がない(というか使うべきではない)__int64型を、さらにunsignedで使ってみました☆
1
2
3
4
5
6
7
8
#include<stdio.h>
int main(void){
  unsigned __int64 x,y=1;
  int z=1;
  for(printf("正数="),scanf("%I64d",&x);x>9;z++,y*=10,x/=10);
  printf("桁数=%d\n最大=%I64u\n",z,y);
  return 0;
}

ううむw なぜかpow関数を自作したくなり、作ってしまったw あまり良くないコードかもしれませんが、みせしめのため投稿(ノ∀`)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
int pow();

int main(int argc, char **argv)
{
	if (argc != 2) {
		fprintf(stderr, "error\n");
		exit(1);
	}
	int i;
	int digit = 0;

	i = atoi(argv[1]);	
	if (i < 0)
		i = -i;
	
	while (i > 0) {
		i /= 10;
		digit++;
	}
	printf("[%d, %d]\n", digit, pow(10, (digit - 1)));
	exit(1);
}

int pow(int x, int y)
{
	int t = 1;
	while (y > 0) {
		t *= x;
		y--;
	}
	return t;
}

特に難しい事をする事もなく。

1
2
3
4
5
6
7
8
9
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    printf("[%d, 1%.*0d]", strlen(argv[1]), strlen(argv[1])-1, 0);
    return EXIT_SUCCESS;
}

Index

Feed

Other

Link

Pathtraq

loading...