B1011 & 问题 F: A+B和C (15)

本文介绍了一个算法,用于判断三个给定整数A、B和C在[-2^31,2^31]区间内,A+B是否大于C。通过使用long long类型变量避免整数溢出,确保了算法的正确性。文章还回顾了不同整型变量的取值范围,包括short、long、int和long long。

题目描述

给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。

输入

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

输出

对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

样例输入

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

样例输出

Case #1: false
Case #2: true
Case #3: true
Case #4: false

顺便复习一下整型(不含无符号)范围...

shor:[-2^15,2^15-1]  大于10^4 小于10^5

long和int相当:[-2^31 , 2^31 -1]  大于10^9   小于10^10

QAQ 一直以为long的范围介于int 和 longlong?比如47次方啥的

long long 相当于__int64 (VC) :[-2^63,2^63-1]  大于10^18 小于10^19

 

#include<cstdio>
int main()
{	
	int T;
	scanf("%d",&T);
	for(int i=1;i<=T;i++) 
	{
		long long A,B,C;
		scanf("%lld%lld%lld",&A,&B,&C);
		if(A+B>C)
			printf("Case #%d: true\n",i);
		else
			printf("Case #%d: false\n",i);
	}
	return 0;
}

格式错误有点尴尬...:和true之间有个空格...

修改代码,使闹钟能够响,其他功能完好module time55_display( input wire clk, // 50MHz时钟 input wire mode_switch, // 模式切换按钮(低有效,短按切换显示,长按进入调整) input wire adj_inc, // 增加数值按钮 input wire adj_dec, // 减少数值按钮 output reg [6:0] seg, // 段选信号(共阳数码管) output reg [3:0] an, // 位选信号(低电平有效) output buzzer // 蜂鸣器控制信号 ); // 共阳数码管段码表 (g f e d c b a) parameter SEG_0 = 7&#39;b1000000; parameter SEG_1 = 7&#39;b1111001; parameter SEG_2 = 7&#39;b0100100; parameter SEG_3 = 7&#39;b0110000; parameter SEG_4 = 7&#39;b0011001; parameter SEG_5 = 7&#39;b0010010; parameter SEG_6 = 7&#39;b0000010; parameter SEG_7 = 7&#39;b1111000; parameter SEG_8 = 7&#39;b0000000; parameter SEG_9 = 7&#39;b0010000; // 系统时钟频率蜂鸣器参数 parameter CLK_FRE = 50_000_000; parameter BEEP_FRE = 1000; parameter BEEP_CNT_MAX = CLK_FRE / (2 * BEEP_FRE) - 1; // 新增闹钟寄存器 reg [7:0] alarm_hour = 8&#39;h07; // 默认闹钟时间7:00 reg [7:0] alarm_min = 8&#39;h00; reg alarm_enable = 0; // 闹钟使能标志 // 蜂鸣器控制改进 reg [15:0] beep_cnt; reg beep_signal; reg beep_enable; reg [2:0] beep_duration; reg alarm_triggered; // 闹钟触发标志 reg [3:0] alarm_beep_count; // 闹钟蜂鸣次数计数器 // 改进的蜂鸣器控制逻辑 always @(posedge clk) begin if (auto_rst) begin beep_enable &lt;= 0; beep_duration &lt;= 0; alarm_triggered &lt;= 0; alarm_beep_count &lt;= 0; end else if (en_1hz) begin // 检闹钟触发条件 if (alarm_enable &amp;&amp; !alarm_triggered &amp;&amp; hour == alarm_hour &amp;&amp; min == alarm_min &amp;&amp; sec == 0) begin beep_enable &lt;= 1; alarm_triggered &lt;= 1; beep_duration &lt;= 0; alarm_beep_count &lt;= 0; end // 闹钟蜂鸣控制 else if (alarm_triggered) begin if (beep_duration &lt; 3&#39;d4) begin beep_duration &lt;= beep_duration + 1; end else begin beep_duration &lt;= 0; if (alarm_beep_count &lt; 4&#39;d10) begin alarm_beep_count &lt;= alarm_beep_count + 1; beep_enable &lt;= ~beep_enable; // 交替开关蜂鸣器 end else begin beep_enable &lt;= 0; alarm_triggered &lt;= 0; end end end // 检整点报时 else if (!adjust_mode &amp;&amp; min == 0 &amp;&amp; sec == 0) begin beep_enable &lt;= 1; beep_duration &lt;= 0; end // 处理普通蜂鸣持续时间 else if (beep_enable &amp;&amp; !alarm_triggered) begin if (beep_duration &lt; 3&#39;d4) beep_duration &lt;= beep_duration + 1; else begin beep_enable &lt;= 0; end end // 按钮中断蜂鸣(仅中断非闹钟蜂鸣) if ((adj_inc_pressed || adj_dec_pressed) &amp;&amp; beep_enable &amp;&amp; !alarm_triggered) begin beep_enable &lt;= 0; end end end // 蜂鸣器分频器 always @(posedge clk) begin if (auto_rst) begin beep_cnt &lt;= 0; beep_signal &lt;= 0; end else if (beep_enable) begin if (beep_cnt &gt;= BEEP_CNT_MAX) begin beep_cnt &lt;= 0; beep_signal &lt;= ~beep_signal; end else beep_cnt &lt;= beep_cnt + 1; end else begin beep_cnt &lt;= 0; beep_signal &lt;= 0; end end assign buzzer = beep_signal; // 新增闹钟设置逻辑 always @(posedge clk) begin if (auto_rst) begin alarm_hour &lt;= 8&#39;h07; alarm_min &lt;= 8&#39;h00; end else if (adjust_mode) begin case(display_mode) 3&#39;d4: begin // 调整闹钟小时 if (adj_inc_pressed) alarm_hour &lt;= (alarm_hour == 8&#39;h23) ? 0 : (alarm_hour[3:0]==9) ? {alarm_hour[7:4]+1,4&#39;d0} : alarm_hour+1; else if (adj_dec_pressed) alarm_hour &lt;= (alarm_hour == 0) ? 8&#39;h23 : (alarm_hour[3:0]==0) ? {alarm_hour[7:4]-1,4&#39;d9} : alarm_hour-1; end 3&#39;d5: begin // 调整闹钟分钟 if (adj_inc_pressed) alarm_min &lt;= (alarm_min == 8&#39;h59) ? 0 : (alarm_min[3:0]==9) ? {alarm_min[7:4]+1,4&#39;d0} : alarm_min+1; else if (adj_dec_pressed) alarm_min &lt;= (alarm_min == 0) ? 8&#39;h59 : (alarm_min[3:0]==0) ? {alarm_min[7:4]-1,4&#39;d9} : alarm_min-1; end endcase end end // 内部自动复位逻辑--------------------------------- reg [15:0] auto_rst_cnt = 0; reg auto_rst = 1&#39;b1; always @(posedge clk) begin auto_rst_cnt &lt;= auto_rst_cnt + (auto_rst_cnt &lt; 10); auto_rst &lt;= (auto_rst_cnt &lt; 10); end // 时钟分频模块------------------------------------ reg [25:0] div_counter_1hz; reg [19:0] div_counter_100hz; wire en_1hz; wire en_100hz; always @(posedge clk) begin if (auto_rst) begin div_counter_1hz &lt;= 0; div_counter_100hz &lt;= 0; end else begin // 1Hz分频(用于时间计数) div_counter_1hz &lt;= (div_counter_1hz == 26&#39;d49_999_999) ? 0 : div_counter_1hz + 1; // 100Hz分频(用于计时器) div_counter_100hz &lt;= (div_counter_100hz == 20&#39;d499_999) ? 0 : div_counter_100hz + 1; end end assign en_1hz = (div_counter_1hz == 26&#39;d49_999_999); assign en_100hz = (div_counter_100hz == 20&#39;d499_999); // 时分秒计数器模块--------------------------------- reg [7:0] hour = 8&#39;h23; // 试用初始值 reg [7:0] min = 8&#39;h59; reg [7:0] sec = 8&#39;h50; // 四位计时器模块---------------------------------- reg [15:0] timer = 0; // BCD格式[15:12]千位 [11:8]百位 [7:4]十位 [3:0]个位 reg pause_timer = 0; // 暂停状态寄存器 reg reset_timer = 0; // 复位信号 // 处理暂停复位逻辑 always @(posedge clk) begin if (auto_rst) begin pause_timer &lt;= 0; reset_timer &lt;= 0; end else begin // 检秒表模式下的按钮动作 if (display_mode == 2&#39;d3 &amp;&amp; !adjust_mode) begin // 短按adj_inc切换暂停状态 if (adj_inc_pressed) pause_timer &lt;= ~pause_timer; // 短按adj_dec复位计时器 reset_timer &lt;= adj_dec_pressed; end else begin reset_timer &lt;= 0; // 非秒表模式时清除复位信号 end end end always @(posedge clk) begin if (auto_rst || reset_timer) timer &lt;= 0; else if (en_100hz &amp;&amp; !pause_timer) begin // 暂停时停止计数 if (timer[3:0] == 4&#39;d9) begin timer[3:0] &lt;= 4&#39;d0; if (timer[7:4] == 4&#39;d9) begin timer[7:4] &lt;= 4&#39;d0; if (timer[11:8] == 4&#39;d9) begin timer[11:8] &lt;= 4&#39;d0; if (timer[15:12] == 4&#39;d9) timer[15:12] &lt;= 4&#39;d0; else timer[15:12] &lt;= timer[15:12] + 4&#39;d1; end else timer[11:8] &lt;= timer[11:8] + 4&#39;d1; end else timer[7:4] &lt;= timer[7:4] + 4&#39;d1; end else timer[3:0] &lt;= timer[3:0] + 4&#39;d1; end end // 调整模式控制------------------------------------ reg adjust_mode = 0; reg [25:0] mode_debounce_cnt; reg [2:0] mode_switch_sync; reg long_press_occurred; always @(posedge clk) begin mode_switch_sync &lt;= {mode_switch_sync[1:0], mode_switch}; if (mode_switch_sync[2:1] == 2&#39;b10) begin mode_debounce_cnt &lt;= 0; long_press_occurred &lt;= 0; end else if (mode_switch_sync[1] == 1&#39;b0) begin if (mode_debounce_cnt &lt; 26&#39;d50_000_000) mode_debounce_cnt &lt;= mode_debounce_cnt + 1; end if (mode_debounce_cnt == 26&#39;d49_999_999) begin adjust_mode &lt;= ~adjust_mode; long_press_occurred &lt;= 1; end end // 数值调整按钮处理--------------------------------- reg [2:0] adj_inc_sync, adj_dec_sync; reg [23:0] adj_inc_debounce, adj_dec_debounce; reg adj_inc_pressed, adj_dec_pressed; always @(posedge clk) begin adj_inc_sync &lt;= {adj_inc_sync[1:0], adj_inc}; adj_dec_sync &lt;= {adj_dec_sync[1:0], adj_dec}; end always @(posedge clk) begin if (adj_inc_sync[2:1] == 2&#39;b10) adj_inc_debounce &lt;= 0; else if (adj_inc_debounce &lt; 24&#39;d1_000_000) adj_inc_debounce &lt;= adj_inc_debounce + 1; adj_inc_pressed &lt;= (adj_inc_debounce == 24&#39;d999_999) ? ~adj_inc_sync[2] : 0; if (adj_dec_sync[2:1] == 2&#39;b10) adj_dec_debounce &lt;= 0; else if (adj_dec_debounce &lt; 24&#39;d1_000_000) adj_dec_debounce &lt;= adj_dec_debounce + 1; adj_dec_pressed &lt;= (adj_dec_debounce == 24&#39;d999_999) ? ~adj_dec_sync[2] : 0; end // 时间计数与调整逻辑------------------------------- wire en_1hz_adj = en_1hz &amp; ~adjust_mode; always @(posedge clk) begin if (auto_rst) sec &lt;= 0; else if (en_1hz_adj) begin sec &lt;= (sec == 8&#39;h59) ? 0 : (sec[3:0] == 9) ? {sec[7:4]+4&#39;d1, 4&#39;d0} : sec + 1; end else if (adjust_mode &amp;&amp; display_mode == 2&#39;d2) begin if (adj_inc_pressed) sec &lt;= (sec == 8&#39;h59) ? 0 : (sec[3:0] == 9) ? {sec[7:4]+1, 4&#39;d0} : sec + 1; else if (adj_dec_pressed) sec &lt;= (sec == 0) ? 8&#39;h59 : (sec[3:0] == 0) ? {sec[7:4]-1, 4&#39;d9} : sec - 1; end end always @(posedge clk) begin if (auto_rst) min &lt;= 0; else if (en_1hz_adj &amp;&amp; sec == 8&#39;h59) begin min &lt;= (min == 8&#39;h59) ? 0 : (min[3:0] == 9) ? {min[7:4]+1, 4&#39;d0} : min + 1; end else if (adjust_mode &amp;&amp; display_mode == 2&#39;d1) begin if (adj_inc_pressed) min &lt;= (min == 8&#39;h59) ? 0 : (min[3:0] == 9) ? {min[7:4]+1, 4&#39;d0} : min + 1; else if (adj_dec_pressed) min &lt;= (min == 0) ? 8&#39;h59 : (min[3:0] == 0) ? {min[7:4]-1, 4&#39;d9} : min - 1; end end always @(posedge clk) begin if (auto_rst) hour &lt;= 0; else if (en_1hz_adj &amp;&amp; sec == 8&#39;h59 &amp;&amp; min == 8&#39;h59) begin hour &lt;= (hour == 8&#39;h23) ? 0 : (hour[3:0] == 9) ? {hour[7:4]+1, 4&#39;d0} : hour + 1; end else if (adjust_mode &amp;&amp; display_mode == 2&#39;d0) begin if (adj_inc_pressed) hour &lt;= (hour == 8&#39;h23) ? 0 : (hour[3:0] == 9) ? {hour[7:4]+1, 4&#39;d0} : hour + 1; else if (adj_dec_pressed) hour &lt;= (hour == 0) ? 8&#39;h23 : (hour[3:0] == 0) ? {hour[7:4]-1, 4&#39;d9} : hour - 1; end end // 显示模式切换模块--------------------------------- reg [2:0] display_mode = 0; reg [23:0] debounce_cnt; always @(posedge clk) begin if (auto_rst) debounce_cnt &lt;= 0; else if (~adjust_mode) begin if (mode_switch_sync[2:1] == 2&#39;b01) begin if (debounce_cnt &gt; 24&#39;d999_999 &amp;&amp; !long_press_occurred) begin display_mode &lt;= (display_mode == 3&#39;d5) ? 0 : display_mode + 1; end debounce_cnt &lt;= 0; end else begin debounce_cnt &lt;= (debounce_cnt &lt; 24&#39;d1_000_000) ? debounce_cnt + 1 : debounce_cnt; end end end // 显示数据选择器----------------------------------- reg [15:0] display_data; always @* begin case(display_mode) 3&#39;d0: display_data = {8&#39;h00, hour}; 3&#39;d1: display_data = {8&#39;h00, min}; 3&#39;d2: display_data = {8&#39;h00, sec}; 3&#39;d3: display_data = timer; 3&#39;d4: display_data = {8&#39;h00, alarm_hour}; 3&#39;d5: display_data = {8&#39;h00, alarm_min}; default: display_data = 16&#39;h0000; endcase end // 新增闹钟使能控制 always @(posedge clk) begin if (auto_rst) alarm_enable &lt;= 0; else if (~adjust_mode &amp;&amp; (display_mode == 3&#39;d4 || display_mode == 3&#39;d5)) begin if (adj_inc_pressed) alarm_enable &lt;= ~alarm_enable; end end // 动态扫描与闪烁控制------------------------------- reg [17:0] scan_cnt; reg [23:0] blink_cnt; wire [1:0] scan_sel = scan_cnt[17:16]; wire blink = blink_cnt[23]; always @(posedge clk) begin scan_cnt &lt;= scan_cnt + 1; blink_cnt &lt;= blink_cnt + 1; end // 改进的显示输出(添加闹钟指示) always @* begin an = 4&#39;b1111; seg = 7&#39;b1111111; if (~adjust_mode || blink) begin case(display_mode) 3&#39;d0, 3&#39;d1, 3&#39;d2: begin // 显示时间(两位) case(scan_sel[1]) 1&#39;b0: begin // 十位 an = 4&#39;b1110; case(display_data[7:4]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; default: seg = 7&#39;b1111111; endcase end 1&#39;b1: begin // 个位 an = 4&#39;b1101; case(display_data[3:0]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; 4&#39;d6: seg = SEG_6; 4&#39;d7: seg = SEG_7; 4&#39;d8: seg = SEG_8; 4&#39;d9: seg = SEG_9; default: seg = 7&#39;b1111111; endcase end endcase end 3&#39;d3: begin // 显示计时器(四位) case(scan_sel) 2&#39;b00: begin // 千位 an = 4&#39;b1110; case(display_data[15:12]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; 4&#39;d6: seg = SEG_6; 4&#39;d7: seg = SEG_7; 4&#39;d8: seg = SEG_8; 4&#39;d9: seg = SEG_9; default: seg = 7&#39;b1111111; endcase end 2&#39;b01: begin // 百位 an = 4&#39;b1101; case(display_data[11:8]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; 4&#39;d6: seg = SEG_6; 4&#39;d7: seg = SEG_7; 4&#39;d8: seg = SEG_8; 4&#39;d9: seg = SEG_9; default: seg = 7&#39;b1111111; endcase end 2&#39;b10: begin // 十位 an = 4&#39;b1011; case(display_data[7:4]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; default: seg = 7&#39;b1111111; endcase end 2&#39;b11: begin // 个位 an = 4&#39;b0111; case(display_data[3:0]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; 4&#39;d6: seg = SEG_6; 4&#39;d7: seg = SEG_7; 4&#39;d8: seg = SEG_8; 4&#39;d9: seg = SEG_9; default: seg = 7&#39;b1111111; endcase end endcase end 3&#39;d4, 3&#39;d5: begin // 显示闹钟时间(两位) case(scan_sel[1]) 1&#39;b0: begin // 十位 an = 4&#39;b1110; case(display_data[7:4]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; default: seg = 7&#39;b1111111; endcase end 1&#39;b1: begin // 个位 an = 4&#39;b1101; case(display_data[3:0]) 4&#39;d0: seg = SEG_0; 4&#39;d1: seg = SEG_1; 4&#39;d2: seg = SEG_2; 4&#39;d3: seg = SEG_3; 4&#39;d4: seg = SEG_4; 4&#39;d5: seg = SEG_5; 4&#39;d6: seg = SEG_6; 4&#39;d7: seg = SEG_7; 4&#39;d8: seg = SEG_8; 4&#39;d9: seg = SEG_9; default: seg = 7&#39;b1111111; endcase end endcase end default: begin an = 4&#39;b1111; seg = 7&#39;b1111111; end endcase end end endmodule 完整的经过修改的代码,不要省略,完完整整的,不要说原代码一样
05-28
为这段代码加注释module sy2(a,b,c,d,e,f,g,sel,clk,en); output a,b,c,d,e,f,g; output [7:0]sel; input [7:0] en; input clk; reg a,b,c,d,e,f,g; reg [7:0] sel; reg clk_reg; reg [8:0] count; reg [2:0] state; parameter s0=3&#39;d0,s1=3&#39;d1,s2=3&#39;d2,s3=3&#39;d3, s4=3&#39;d4,s5=3&#39;d5,s6=3&#39;d6,s7=3&#39;d7; always@(posedge clk) if(count==9&#39;d400) begin clk_reg&lt;=~clk_reg; count&lt;=9&#39;d0; end else count&lt;=count+9&#39;d1; always@(posedge clk_reg) begin case(state) s0: begin if(en[7]) begin sel&lt;=8&#39;b0111_1111; {a,b,c,d,e,f,g}&lt;=7&#39;b1101101; end else sel&lt;=8&#39;b1111_1111; state&lt;=s1; end s1: begin if(en[6]) begin sel&lt;=8&#39;b1011_1111; {a,b,c,d,e,f,g}&lt;=7&#39;b1111110; end else sel&lt;=8&#39;b1111_1111; state&lt;=s2; end s2: begin if(en[5]) begin sel&lt;=8&#39;b1101_1111; {a,b,c,d,e,f,g}&lt;=7&#39;b1111110; end else sel&lt;=8&#39;b1111_1111; state&lt;=s3; end s3: begin if(en[4]) begin sel&lt;=8&#39;b1110_1111; {a,b,c,d,e,f,g}&lt;=7&#39;b1101101; end else sel&lt;=8&#39;b1111_1111; state&lt;=s4; end s4: begin if(en[3]) begin sel&lt;=8&#39;b1111_0111; {a,b,c,d,e,f,g}&lt;=7&#39;b1111110; end else sel&lt;=8&#39;b1111_1111; state&lt;=s5; end s5: begin if(en[2]) begin sel&lt;=8&#39;b1111_1011; {a,b,c,d,e,f,g}&lt;=7&#39;b1101101; end else sel&lt;=8&#39;b1111_1111; state&lt;=s6; end s6: begin if(en[1]) begin sel&lt;=8&#39;b1111_1101; {a,b,c,d,e,f,g}&lt;=7&#39;b1111110; end else sel&lt;=8&#39;b1111_1111; state&lt;=s7; end s7: begin if(en[0]) begin sel&lt;=8&#39;b1111_1110; {a,b,c,d,e,f,g}&lt;=7&#39;b1111001; end else sel&lt;=8&#39;b1111_1111; state&lt;=s0; end default:state&lt;=s0; endcase end endmodule
05-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云无心鸟知还

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值