leetcode-C++程序里面一个很奇怪的bug!跪求解释!!!

问题描述

C++程序里面一个很奇怪的bug!跪求解释!!!

这是我试图求解leetcode 第六题,这不重要,主要看一下程序里面那个if语句的执行
问题,不用看我针对这道题的逻辑对不对,这不是重点,重点是那个if语句!!!
在代码那个(***)的地方我给了注释!!!

 #include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    string s;
    int numRows;
    cin >> s >> numRows;
    char *ss = new char[s.size()];
    int k = 2 * numRows - 2;//每个单元元素的个数
    int m = s.size() / k;//一共有多少个单元
    int flag = s.size()  % k;
    if(flag != 0)
        m++;
    int n = 2 * m;
    //先对第一行单独处理
    for(int i = 0, j = 0; j < m; ++j, i = i + k)
    {
        ss[j] = s[i];
    }
    //对第二行至倒数第二行的处理
    //i =(所在行 - 1)
    //j =(所在列 - 1)
    int count = 0;
    int i = 1, j = 0;
    int x;
    cout << endl;
    while(i < numRows - 1)
    {
        while(count < n)
        {
            //偶数列时要加上行数,奇数列时要减去行数
            if(j % 2 == 1)
                x = 1;
            else
                x = -1;
            int num = (j / 2 + j % 2);//0 1 2 3 4 5 6 -> 0 1 1 2 2 3 3 

            cout << "k:" << k << 'n' << "num:" << num << 'n';
            cout << "i:" << i << 'n' << "x:" << x << 'n';
            cout << "s.size():" << s.size() << endl;

            //这里输入PAYPALISHIRING 3 之后 k=4,num=0,i=1,x=-1,s.size()=14明显if语句执行不了,
            //但是居然执行了,我好郁闷啊!!!求解!!! 

         (***)   if((k*num+i*x) >= s.size())
            {
                cout << "DDDDDDDDD"  << endl;
                break;
            }
            //m代表第一行元素的个数
            cout << "CCCCCCCCCC" << endl;
            ss[m+n*(i-1)+j] = s[k*num+i*x];
            cout << s[k*num+i*x];
            j++;
            count++;
        }
        i++;
    }
    //对最后一行进行处理
    i--;
    j--;
    for(int jj = m+n*(i-1)+j, ii = numRows-1; ii < s.size() && jj < s.size(); ++jj, ii = ii + k)
    {
        ss[jj] = s[ii];
    }

    cout << ss << endl;
    return 0;
}

解决方案

s.size()返回的是unsigned int,如果不强制转换成int类型的话,就会用一个-1的int和14的unsignedint比较,-1转换成unsigned int会是一个很大的数值

 if((k*num+i*x) >= ((int)s.size()))

解决方案二:

这篇文章解释的很详细

 http://blog.csdn.net/ljianhui/article/details/10367703

解决方案三:

不错的题,注意两数运算,当其中一个为unsigned 时,运算将隐式转换为无符号运算。

解决方案四:

补充一点,sizeof(a) a为类型或者变量 表达式的值 可作为数组下标。

时间: 2024-08-01 22:26:03

leetcode-C++程序里面一个很奇怪的bug!跪求解释!!!的相关文章

关于tomcate的一个很奇怪的问题,求指导!!

问题描述 我正在学习dwr,对于xml语法什么的也不是很懂........(这是我的文化背景)在遇到这个问题之前,一切都还算顺利的,但是我不知道自己干了什么,有一次我和往常一样新建了一个web工程(继续学习dwr),我引进了dwr.jar,然后加进web.xml和dwr.xml,然后把工程加进tomcate里面,启动tomcate服务器,结果就出错了:严重: Parse Fatal Error at line 2 column 2: The element type "wep-app"

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

c语言 单片机-keil4开发中遇到的一个很奇怪的问题。

问题描述 keil4开发中遇到的一个很奇怪的问题. void main(){ // uchar test_i; const uchar timp_button=0xfF; //this value is that the button havn't sticked uchar n_delay; //delay unsigned char j=0; unsigned char i; intend_initiation(); //调用时间设定程序 while(1){ if((hour==alarm_

结构体数组-C++中一个很奇怪的数组

问题描述 C++中一个很奇怪的数组 static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = { { ins_update, 1, 1000 }, { one_hz_print, 50, 1000 }, { five_second_call, 250, 1800 }, }; 注:AP_Scheduler是一个类,Task是这个类的结构体成员,一下是Task的定义: struct Task { task_fn_t function; u

在单片机开发中,我遇到了一个很奇怪的关于外部中断的问题

问题描述 在单片机开发中,我遇到了一个很奇怪的关于外部中断的问题 void button_int0 () interrupt 0 { //当函数正确时,需改正delay(大数目)为delay_stop(大数目); uchar timp; uint i=0; /**** IE=0x80时,程序执行完了,但是没有办法退出中断, 当使用EA=0时,就可以退出中断了.很肯定的是,并没有重复进入中断. *****/ //IE=0x80; EX0=0; EA=0; light =1: timp=P1; ex

线程-sql 找错,一个很奇怪的错误

问题描述 sql 找错,一个很奇怪的错误 sql = "UPDATE bs2_dl_road_min SET count=count+{0} WHERE time='{1}' " "AND host_ip='{2}' AND module='{3}' AND method='{4}' AND status='{5}' " "AND size_level='{6}' AND level='{7}' AND submodule_road='{8}'"

关于备份数据库一个很奇怪的问题,求教!

问题描述 今天在公司做项目,遇到一个很奇怪的问题,目的是通过C#输出一个.bat文件,然后执行.bat文件备份数据库,在公司执行代码时会生成一个0字节的.sql文件,但是在程序外,直接执行该.bat文件,则会生成数据库的备份,不知道是哪里导致的,求教各位大神,代码如下:stringpath=Application.StartupPath;if(!string.IsNullOrEmpty(path)){StreamWriterreBack=newStreamWriter(Application.S

java-大神进来帮看看,一个很奇怪的问题

问题描述 大神进来帮看看,一个很奇怪的问题 代码如下,偶尔会出现数据库未更新的问题,但是看日志里面提交sql的日志已经打印出来,sql语句单独拿出来执行也没问题,我是真搞不明白了,大神求助啊! 解决方案 有可能是因为表字段的关联关系或者表字段的大小限制,是否非空,数值范围的限制 解决方案二: catch后,把exception输出到日志中,不就知道报的什么错了么? 插入失败的可能原因太多了

代码-一个很奇怪的js不清楚到底是什么意思

问题描述 一个很奇怪的js不清楚到底是什么意思 Q x$=[ 'KKorupo1ikllkwKK', 'KKorupo1ikllkwKK', 'Drzpiq', 'orupoCryl', 'W1a1KmXmXmW', 'W1I1amW1m1Jm', 'AhhhmoitClpjjmuqAhhhmoitClpjjmzkAhhhmoitClpjjmzrTiAhhhmoitClpjjmqklAhhhmoitClpjjmrwtAhhhmoitClpjjmyrAhhhmoitClpjjmlGAhhhmoiG