2012年3月23日金曜日

久々の

プログラミング。
数検で出た問題を解くプログラムをぱぱっと作ったついでに思いついたので今更ながらに書いてみた。

任意の個数の0の連続で終わる数値を与えられたとき、0に当てはまる数が当てはめた数の倍数となる内、最大の数値を求めるプログラム。わかりづらい。
簡単に言うと、2000のとき、2ABC が ABC の倍数になる最大の数。(ABCは各桁の数字)
#include<cstdio>
int main(void){
  int x,y,i,ans = 0;
  std::printf("二桁以上の数値を入力して下さい。\n");
  std::printf("例:5ABC → 5000  2AB → 200\n");
  std::printf(":");
  std::scanf("%d",&x);

  i = 1;
  while(x % i == 0){
    y = i;
    i = i * 10;
  }

  if(y == 1 || x < 10){
    std::printf("Error.\n");
    return 0;
  }

  for(i = 1; i < y; i++)
    if((i + x) % i == 0)
      ans = i;

  std::printf("最大値は %d です\n", ans + x);

  return 0;

}
こんな感じ。
では。

0 件のコメント:

コメントを投稿