
javaでうるう年判定のプログラムを作成しています。
プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。
仕様としては、
1.時間に関するAPIなどは一切使わずに完全に自作
2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが)
3.60537895631062456(Long値) などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力
最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。
public static int isLeap(int year){
if(year%4==0 && (year%100!=0 || year%400==0)) return 1;
return 0;
}
問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。
これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。
なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。
うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。
お知恵を貸してください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>3.60537895631062456(Long値) などの入力値に対して
↑は何の値でしょうか?
(特定の年の元旦からの経過秒数?または任意の年月日?)
起点の年月日が既知であれば、それがうるう年か否かはすぐ
わかるはずですが?
>最初は以下の関数を使用してループをかけていたの
>ですが、仕様3の入力値に対して50秒近くかかって
>しまい、上手くいきませんでした。
>
>public static int isLeap(int year){
>if(year%4==0 && (year%100!=0 || year%400==0))
>return 1;
>return 0;
>}
上記にはループなどありませんが、どういったループを
かけたのがわからないと、どこが悪かったのか確認のしよう
が無いと思いますが?
1970年1月1日0:0:0
からの経過時間(秒)です。
それに対し、時,分,秒を求めた後、経過年数を求めようとしていました。
この問題に関してはJAVAのスレッドで解決していただきました。
真剣に考えて頂き、本当にありがとうございました。
スレッド違いのため、管理者に削除依頼を行いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
ごめんなさい 応用てきだとおう...
-
VBAでの一時停止と再開の方法
-
「人を傷つけることは悪いこと...
-
エクセルの当番表を作っていま...
-
配列にaaaからzzzまでの17576(2...
-
隣接交換法のアルゴリズムについて
-
VLC media Playerでのループ再生
-
(C#)フォームのキャンセルで計...
-
ループ結線の調査方法
-
多重ループの抜けだし方
-
Perlを使用してひらがな表...
-
VBAでln関数の計算
-
ループについて教えてください...
-
Visual BasicのUserFormが閉じ...
-
クッキーの処理
-
GIFアニメをループさせたくない
-
エクセル 数値の分解と展開
-
C言語でファクト関数を使わずに...
-
プログラミングについて int i,...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
vb.netです。2次元配列の要素を...
-
VBAで3秒だけ時間を止めたい
-
エクセルの当番表を作っていま...
-
UWSCに制限時間を付けたいです
-
DOSコマンドのループ内のTIMEコ...
-
VBAでの一時停止と再開の方法
-
CSVファイルの特定の行だけを読...
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
VBA for i=1 to lastrow
-
Do whileでExitせず、ループの...
-
VBA Boxが空白の場合のメッセー...
-
vb.netからエクセル関数書き込み
-
イベントの発生を待つ
-
乱数の桁数指定、または範囲指定。
-
エクセル関数で1〜12の数字がル...
おすすめ情報