c51 keil中用十进制数转为16进制计算闰年的方法,错在哪里?大神帮忙看一下,跪谢!

s=table2[3]-0x30+(table2[2]-0x30)*(0x0A)+(table2[1]-0x30)*pow(0x0A,2)+(table2[0]-0x30)*pow(0x0A,3);
if((s%(0x04)==0&&s%(0x64)!=0)||(s%(0x64)==0&&s%(0x190))==0)
做一个万年历,lcd1602只能是16进制数,所以需要将十进制改为6进制来计算闰年,大神帮忙忙,跪谢了。

有错吗?

只是,觉得可以简化。

楼主原来的语句是:

s = table2[3] - 0x30 +
(table2[2] - 0x30) * (0x0A) +
(table2[1] - 0x30) * pow(0x0A,2) +
(table2[0] - 0x30) * pow(0x0A, 3);

if((s % (0x04) == 0 && s % (0x64) != 0) || (s % (0x64) == 0 && s % (0x190)) == 0)

不一定非得用 16 进制,十进制也可。

改成:

s = table2[3] - 0x30 +
(table2[2] - 0x30) * 10 +
(table2[1] - 0x30) * 100 +
(table2[0] - 0x30) * 1000;

if ((s % 4 == 0 && s % 100 != 0) || (s % 100 == 0 && s % 400 == 0))

看起来,容易多了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-04
需要给你完成吗

c51 keil中用十进制数转为16进制计算闰年的方法,错在哪里?大神帮忙看一...
(table2[0] - 0x30) * pow(0x0A, 3);if((s % (0x04) == 0 && s % (0x64) != 0) || (s % (0x64) == 0 && s % (0x190)) == 0)不一定非得用 16 进制,十进制也可。改成:s = table2[3] - 0x30 + (table2[2] - 0x30) * 10 + (table2[1] - 0x30)...

相似回答