/**
ID: njuwz151
TASK: palsquare
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; char baseTable[] = {'', '', '', '', '', '', '', '', '', '', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'}; char* reverse(const char* src, int len); char* base10ToBaseN(int number, int base); int main() {
freopen("palsquare.in", "r", stdin);
freopen("palsquare.out", "w", stdout);
int base;
cin >> base;
char* palNumber;
char* palSquare;
char* reverseSquare;
for(int i = ; i <= ; i++) {
if(!palNumber) {
delete palNumber;
palNumber = NULL;
}
palNumber = base10ToBaseN(i, base);
if(!palSquare) {
delete palSquare;
palSquare = NULL;
}
palSquare = base10ToBaseN(i * i, base);
if(!reverseSquare) {
delete palSquare;
palSquare = NULL;
}
reverseSquare = reverse(palSquare, strlen(palSquare));
for(int j = ; j < strlen(palSquare); j++) {
if(palSquare[j] != reverseSquare[j]) {
break;
}
if(j == strlen(palSquare) - ) {
cout << palNumber << " " << palSquare << endl;
}
}
}
return ;
} char* reverse(const char* src, int len) {
char* result = new char[len+];
for(int i = ; i < len; i++) {
result[i] = src[len - - i];
}
result[len] = ;
return result;
} char* base10ToBaseN(int number, int base) {
char* result = new char[];
int len = ;
while(number != ) {
result[len] = baseTable[number % base];
number /= base;
len++;
}
result[len] = ;
return reverse(result, strlen(result));
}

这是原来的代码,在本机跑的时候没有问题,但是在评测的时候报错了。错误信息如下:

program:_malloc.c:2392:_sysmalloc:_Assertion_`(old_top_==_initial_top_(av)_&&_old_size_==_0)_||_((unsigned_long)_(old_size)_>=_MINSIZE_&&_prev_inuse_(old_top)_&&_((unsigned_long)_old_end_&_(pagesize_-_1))_==_0)'_failed. -------------------

在查阅资料之后,应该是说我的代码越界使用了内存,于是我重新写了代码。

 /**
ID: njuwz151
TASK: palsquare
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string> using namespace std; string baseTable = "0123456789ABCDEFGHIJK"; string reverse(string src); string base10ToBaseN(int number, int base); int main() {
freopen("palsquare.in", "r", stdin);
freopen("palsquare.out", "w", stdout);
int base;
cin >> base;
for(int i = ; i <= ; i++) {
string palNumber = base10ToBaseN(i, base);
string palSquare = base10ToBaseN(i * i, base);
string reverseSquare = reverse(palSquare);
for(int j = ; j < palSquare.size(); j++) {
if(palSquare[j] != reverseSquare[j]) {
break;
}
if(j == palSquare.size() - ) {
cout << palNumber << " " << palSquare << endl;
}
}
} return ;
} string reverse(string src) {
int len = src.size();
string result;
for(int i = len - ; i > -; i--) {
result += src[i];
}
return result;
} string base10ToBaseN(int number, int base) {
string result;
while(number > ) {
result = baseTable[number % base] + result;
number /= base;
}
return result;
}

使用了string 来替代数组,说起来我也不是专业写C/C++的,之前char数组和string混合使用出错了,就单用char数组解决问题了,但是这次没能用好char数组,说明我对内存管理还是有一定的认知缺乏。

最新文章

  1. 关于Deprecated: mysql_result: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
  2. Add a Syscall
  3. HTML-DIV布局
  4. POI格式化Cell样式
  5. 2的N次方 【转】
  6. SCRUM,一个采用迭代,增量方法来优化可预见控制风险
  7. JDBC对sql server的操作
  8. LM393,LM741可以用作电压跟随器吗?
  9. android中网络操作使用总结(http)
  10. iOS开发设置关于tabBar和navigationBar以及item中的一些全局属性
  11. C# Lambda表达式运用
  12. DLL生成与使用的全过程
  13. html5版 音乐播放器
  14. wipefs进程
  15. 1025. PAT Ranking (25)
  16. jquery如何阻止子元素继承父元素的事件(又称事件冒泡)
  17. Golang并发模型之Context详解
  18. OWASP TOP 10 2017中文译文
  19. 原生JS实现AJAX、JSONP及DOM加载完成事件,并提供对应方法
  20. FFmpeg Basics学习笔记(1)ffmpeg基础

热门文章

  1. 转:简单的Mysql主从复制设置
  2. docker对cpu使用及在kubernetes中的应用
  3. ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
  4. Mybatis的mapper文件引起模块划分的思考
  5. struts2.5能不能再恶心点
  6. CNPM 遇到use strict的问题
  7. 自定义控件pickView
  8. CAP理论与MongoDB一致性、可用性的一些思考
  9. redis入门指南-第7章-管理
  10. 第 10 章 MySQL Server 性能优化