/* numberのなかに、digit(0-9の1桁の整数)が何文字あるかを数える関数 */ int NumOfDigit(unsigned long number, unsigned long digit){ int ret; ret = 0; /* 0桁ならば0を返す(何も含まれて居ない) */ if(number == 0){ return 0; } /* 1の位が digit であるかどうかのチェック */ if(number % 10 == digit){ ret = 1; /* digit であれば、返り値に1つ足す */ } /* 10で割ることによって次の桁移行のチェックを再帰的に行う */ ret += NumOfDigit(number/10, digit); return ret; }
void CheckNumber(void) { /* 数字群を元に計算した結果の数字の個数が */ /* 元の数字群と同じだけ使われているかどうかのチェック */ /* 0は考慮しない */ int i; unsigned long result; result = 0; /* 数字群を元に、計算結果を作成する */ for(i=1; i<=9; i++){ result += power[i] * number_using[i]; } /* 計算結果の中の数字の個数が、数字群と同じかどうかチェックする */ for(i=1; i<=9; i++){ if(NumOfDigit(result, i) != number_using[i]){ return; /* 1つでも違えば、それは解ではない */ } } printf("%lu \n", result); /* 計算結果は、解である */ return; }
void DrawBrowser_PageInfo(UINT8 ubID) { #if (BROWSER_STYLE==BROWSER_2ND_STYLE) UINT32 CurObjIdx, MaxObjIdx; char sz[20] ={0}; if (AHC_FALSE == AIHC_GetOSDInitStatus()) { AHC_PRINT_RET_ERROR(gbAhcDbgBrk,0); return; } BEGIN_LAYER(ubID); AHC_UF_GetTotalFileCount(&MaxObjIdx); AHC_UF_GetCurrentIndex(&CurObjIdx); AHC_OSDSetFont(ubID, &GUI_Font16B_1); AHC_OSDSetColor(ubID, OSD_COLOR_WHITE); AHC_OSDSetBkColor(ubID, OSD_THUMB_BACKGROUND); AHC_OSDSetPenSize(ubID, 1); if(MaxObjIdx==0) sprintf(sz, "%d/%d", CurObjIdx, MaxObjIdx); else sprintf(sz, "%d/%d", CurObjIdx+1, MaxObjIdx); AHC_OSDDrawText(ubID, (UINT8*)sz, 195, 7, sizeof(sz)); #else RECT obRECT = POS_THUMB_OBLIQUE; UINT16 CurrPage = 0; UINT16 MaxPage = 0; UINT8 digit = 0; UINT16 leftpos = 0; if (AHC_FALSE == AIHC_GetOSDInitStatus()) { AHC_PRINT_RET_ERROR(gbAhcDbgBrk,0); return; } BEGIN_LAYER(ubID); #ifdef ENABLE_GUI_SUPPORT_MULTITASK AHC_OSDSetColor(ubID, OSD_COLOR_TRANSPARENT); #else AHC_OSDSetColor(OSD_COLOR_TRANSPARENT); #endif AHC_OSDDrawFillRect( ubID, (POS_CURPAGE_X-POS_PAGE_OFFSET), POS_CURPAGE_Y, POS_MAXPAGE_X+20, POS_MAXPAGE_Y+16 ); DrawBrowser_GetPageInfo(&CurrPage, &MaxPage); #ifdef ENABLE_GUI_SUPPORT_MULTITASK AHC_OSDSetFont(ubID, &GUI_Font16B_1); AHC_OSDSetColor(ubID, OSD_COLOR_WHITE); AHC_OSDSetBkColor(ubID, OSD_COLOR_TRANSPARENT); AHC_OSDSetPenSize(ubID, 1); #else AHC_OSDSetFont(&GUI_Font16B_1); AHC_OSDSetColor(OSD_COLOR_WHITE); AHC_OSDSetBkColor(OSD_COLOR_TRANSPARENT); AHC_OSDSetPenSize(1); #endif if(0 != MaxPage) { digit = NumOfDigit(MaxPage); leftpos = POS_PAGEINFO(digit, POS_CURPAGE_X); AHC_OSDDrawDec( ubID, CurrPage, leftpos, POS_CURPAGE_Y, digit); leftpos = POS_PAGEINFO(digit, POS_MAXPAGE_X); AHC_OSDDrawDec( ubID, MaxPage, leftpos, POS_MAXPAGE_Y, digit ); #ifdef ENABLE_GUI_SUPPORT_MULTITASK AHC_OSDSetPenSize(ubID, 3); #else AHC_OSDSetPenSize(3); #endif AHC_OSDDrawLine( ubID, obRECT.uiLeft, obRECT.uiLeft+obRECT.uiWidth, obRECT.uiTop, obRECT.uiTop-obRECT.uiHeight); } else { // one page leftpos = POS_PAGEINFO(digit, POS_CURPAGE_X); AHC_OSDDrawDec( ubID, 0, leftpos, POS_CURPAGE_Y, 1); leftpos = POS_PAGEINFO(digit, POS_MAXPAGE_X); AHC_OSDDrawDec( ubID, 0, leftpos, POS_MAXPAGE_Y, 1); #ifdef ENABLE_GUI_SUPPORT_MULTITASK AHC_OSDSetPenSize(ubID, 3); #else AHC_OSDSetPenSize(3); #endif AHC_OSDDrawLine( ubID, obRECT.uiLeft, obRECT.uiLeft+obRECT.uiWidth, obRECT.uiTop, obRECT.uiTop-obRECT.uiHeight); } #endif END_LAYER(ubID); }