現在計算の精度にて不具合が出ていてどこで計算をミスしているのかがわからない状態(僕はまだまだの初心者でC言語以外はまだ理解できない状態です。)
計算の結果が
$ ./a
1日目
26日目
550日目 <=Wrong.
184日目
6703日目
433709日目 <=Wrong.
となっています。
うるう年の4の倍数を考慮することと100年に一回にうるうがないことを考慮したできるだけ簡潔なプログラムを作成しました。
以下がある日からある日までは何日があるのかの正解答案となります
2002年 1月 1日 から数えて 2002年 1月 1日 は 1 日目
2002年11月 4日 から数えて 2002年11月29日 は 26 日目
2001年 5月 4日 から数えて 2002年11月5日 は 551 日目
2000年 1月 20日 から数えて 2000年 7月 21日 は 184 日目
1984年 6月23日 から数えて 2002年10月29日 は 6,703 日目
794年 1月 6日 から数えて 1981年 6月24日 は 433,713 日目 ※
これからより分かりやすい質問する文章が作れるように質問内容が不明や質問する文章について不明があればそれを明記したコメントしてくれたら大変ありがたく思います。
(もし不快を招く文章であれば大変申し訳ありません。)
#include <stdio.h> #define M 12 int m[M]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; typedef struct test { int ye, mo, da; } t1; int ttl( int Mo, int d, int y) { int i; int re=0; if(Mo >=2)re += (y/4); else re += ((y-1)/4); re -= y/100; re += (y-1)*365; for(i=0; i<Mo; i++ )re += m[i]; return re+= d; } int main (void) { t1 in[6] = { {2002, 1, 1}, {2002, 11, 4}, {2001, 5, 4}, {2000, 1, 20}, {1984, 6, 23}, {794, 1, 6}, }, ou[6] = { {2002, 1, 1 }, {2002, 11, 29}, {2002, 11, 5 }, {2000, 7, 21}, {2002, 10, 29}, {1981, 6, 24}, }; int y=0, n=0, d=0; int i=0, b=0, c=0; int t=0; int ri[6] = {1, 26, 551, 184, 6703, 433713}; int qws ; for(qws=0; qws<6; qws++) { // do { // t=0; // printf("From YY MM DD ?=>"); // scanf("%d%d%d", &y, &n, &d); // if( n-1 < M && d <= m[n-1] && d > 0 && n > 0 && y >= 0) // { // t++; // } else { // printf(" エラー発生!確認に迎え\n" ); // continue; // } // // printf("Until YY MM DD ?=>"); // scanf("%d%d%d", &c, &i, &b); // if( i-1 < M && b <= m[n-1] && b > 0 && i > 0 && c >= 0) // { // t++; // } else { // printf(" エラー発生!確認に迎え。。。。\n" ); // } // } while(t != 2); y = in[qws].ye, n = in[qws].mo, d = in[qws].da; c = ou[qws].ye, i = ou[qws].mo, b = ou[qws].da; t= 1 + ttl(i, b, c) - ttl(n, d, y); if(t>0) { printf(" %d日目", t); if(t != ri[qws]) { printf("\t<=Wrong.\n"); continue; } } else { printf("=> %d マイナスになっちゃったけどいける?\n", t); } // printf("\nTo Finish This Little Game, Ctrl + (Key)C is The Only Way... Ha! Ha! Ha! \n "); printf("\n"); } return 0; }
回答2件
あなたの回答
tips
プレビュー