USACO Palindromic Squares__Execution Errorが解決しました
3646 ワード
ローカルマシンでのテストの結果はFull Answerと一致していますが、実行をコミットすると:
コード:
曾兄の助けを経て、上述のDev C++で正常なコードがVS 2010で2点を変更する必要があることを発見しました:
1 st、ヘッダファイルを追加
2 nd,将
変更:
変更後、vsではスルーし、USACOでもパスしました(2 ndがExecution Error、but don't konw whyを招いたのです)
正しいコード:
> Run 8: Execution error: Your program had this runtime error:
Illegal file open (/dev/tty). The program ran for 0.000 CPU
seconds before the error. It used 2052 KB of memory.
------ Data for Run 8 [length=2 bytes] ------
3
----------------------------
コード:
/*
ID: nenusb1
LANG: C
TASK: palsquare
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char str[10];
char s[10];
int len;
void myItoa(int num, int base){
memset(str,'0',sizeof(str));
int i=0;
while(num>0){
int mod = num%base;
num /= base;
if(mod<10) {str[i] = mod + '0';}
else {str[i] = mod-10 + 'A';}
i++;
}
len = i;
}
int isPal(){
int i;
for(i=0; i<len; i++){
if(str[i] != str[len-1-i]) return 0;
}
return 1;
}
void reverse(){
int i;
for(i=0; i<len/2; i++){
char t = str[i];
str[i] = str[len-1-i];
str[len-1-i] = t;
}
}
int main(){
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
int b;
scanf("%d",&b);
int n;
for(n=1; n<=300; n++){
double dsquare = pow(n,2);
int square = dsquare;
myItoa(square,b);
if(isPal()){
//printf("n=%d square=%d---",n,square);
str[len]='\0';
memset(s,'0',sizeof(s));
strcpy(s,str);
myItoa(n,b);
reverse();
str[len]='\0';
printf("%s %s
",str,s);
}
}
return 0;
}
曾兄の助けを経て、上述のDev C++で正常なコードがVS 2010で2点を変更する必要があることを発見しました:
1 st、ヘッダファイルを追加
#include <math.h> // pow
2 nd,将
double dsquare = pow(n,2);
変更:
double dsquare = pow((double)n,2);
変更後、vsではスルーし、USACOでもパスしました(2 ndがExecution Error、but don't konw whyを招いたのです)
正しいコード:
/*
ID: nenusb1
LANG: C
TASK: palsquare
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
char str[20];
char s[20];
int len;
void myItoa(int num, int base){
memset(str,'0',sizeof(str));
int i=0;
while(num>0){
int mod = num%base;
num /= base;
if(mod<10) {str[i] = mod + '0';}
else {str[i] = mod-10 + 'A';}
i++;
}
len = i;
}
int isPal(){
int i;
for(i=0; i<len; i++){
if(str[i] != str[len-1-i]) return 0;
}
return 1;
}
void reverse(){
int i;
for(i=0; i<len/2; i++){
char t = str[i];
str[i] = str[len-1-i];
str[len-1-i] = t;
}
}
int main(){
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
int b;
scanf("%d",&b);
int n;
for(n=1; n<=300; n++){
double dsquare = pow((double)n,2);
int square = dsquare;
myItoa(square,b);
if(isPal()){
//printf("n=%d square=%d---",n,square);
str[len]='\0';
memset(s,'0',sizeof(s));
strcpy(s,str);
myItoa(n,b);
reverse();
str[len]='\0';
printf("%s %s
",str,s);
}
}
return 0;
}