首页 > 程序崩溃怎么破

程序崩溃怎么破

/*
ID:azurefa2
LANG:C++
PROG:palsquare
*/
#include<iostream>
#include<string.h>
#include<stdio.h>

using namespace std;

bool function1(char* number);               //判断回文
char* function2(int number,int system);     //进制转换
char function3(int number);                 //数字转换字符
int main()
{
    int n,i;  
    char *a,*b;
    scanf("%d",&n);
    for(i = 1;i <= 300;i++)
        if(function1(function2(i*i,n)))
        {
            a = function2(i,n) ;
            b = function2(i*i,n) ;
            cout<<a<<" "<<b<<"\n";
            delete[] a;
            delete[] b;
        }
    return 0;
}

bool function1(char* number)
{
    int length = strlen(number);
    int i;
    if(length%2 == 0)
    {
        for(i = 0;i  <=  length/2-1;i++)
        {
            if(number[i] != number[length-1-i])
                return false;
        }
        return true;
    }
    else
    {
        for(i = 0;i  <=(length-1)/2-1;i++ )
        {
            if(number[i] != number[length-i-1])
                return false;
        }
        return true;
    }
}

char* function2(int number,int system)
{
    char *a = new char[20];
    int i = 0,sum = number,length;
    for(i = 0;i <20 ;i++)
        a[i] = 61;
    length = strlen(a);
    for(i = 0;sum != 0;i++)
    {
        a[length-1-i] = function3(sum%system);
        sum = (sum-sum%system)/system;
    }
    for(i = 0;a[i]  == 61;i++)
        ;
    return a+i;

}

char function3(int number)
{
    if(number<10)
        return number+48;
    else
        return 55+number;
}

题目:回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。

给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

感觉写的没错,有时候运行正确,有时候崩溃,哪里有问题啊

【热门文章】
【热门文章】