2016/10/06 联想模拟测试的一道小小编程题

来源:互联网 发布:电线传输数据 编辑:程序博客网 时间:2024/05/17 00:06

判断回文数。这个编程题目大家可能都已经做烂了,但是今天在做联想的模拟测试的时候,还是出了一些小问题。所以提出来,记录一下。

#include<iostream>using namespace std;bool isPalindrome(int x){    int tmp = x;    int i;    int tmp1,tmp2;    int *hd;    int* p;    int cnt = 1;    bool flg = true;    cout<<"the num is "<<x<<"\t"<<endl;    while(x/10 >= 1)    {        cnt = cnt +1;        x = x / 10;    }    cout<<"length of x is "<<cnt<<" \t"<<endl;    x = tmp;    hd = (int*)malloc(sizeof(int) * cnt);    p = hd;    while(x/10 >= 1)    {        *p = x%10;        x = x / 10;        //p = p + sizeof(int);        p = p + 1;    }    *p = x;    p = hd;    for(i = 0;i <= (cnt / 2);i++)    {        tmp1 = *(p + i*1);        tmp2 = *(p + (cnt - i - 1) * 1);        //tmp1 = *(p + i * sizeof(int));        //tmp2 = *(p + (cnt - i - 1) * sizeof(int));        cout<<tmp1<<" and "<<tmp2<<endl;        if( tmp1 !=  tmp2)        {            flg = false;            return flg;        }    }    return flg;}void main(void){    int x;    cin>>x;    while(x < 0)    {        cout<<"input must larger than or equal to 0"<<endl;        cin>>x;    }    bool flg = isPalindrome(x);    cout<<flg<<endl;    system("pause");}

重点在于被屏蔽的一行,原来没有注意到,动态申请的连续内存单元在指针后移的时候只需要 p = p + 1; 即可实现后移到下一个申请的内存单元,从第一个 int单元移动到下一个int单元 ,从一个double单元移动到下一个double单元,而不用像被屏蔽的那个那样p = p + sizeof(int);
在另一个方面,我也决定看看C++里面的vector,比这C语言里面的好使多了!


下面是10月7日通过vector实现的程序,的确是要精简很多了,少了一次循环

#include<iostream>#include<vector>using namespace std;bool isPalindrome(int x){    vector<int> eve;    int i;    cout<<"input num is "<<x<<endl;    while(x/10 >= 1)    {        eve.push_back(x % 10);        x = x / 10;    }    eve.push_back(x);    int len = eve.size();    for(i = 0;i <= (len /2);i++)    {        int tmp1 = eve.at(i);        int tmp2 = eve.at(len - i - 1);        cout<<tmp1<<" and "<<tmp2<<endl;        if(tmp1 != tmp2)        {            return false;        }    }    return true;}void main(void){    int x;    cin>>x;    while(x<0)    {        cout<<"input must larger than or equal to 0!"<<endl;        cin>>x;    }    cout<<isPalindrome(x)<<endl;    system("pause");}
0 0
原创粉丝点击