这次作业做的还行,不过也是一边借助网络一边写的,但是不是直接抄程序!!感觉还可以,通过做题加深对知识点的理解,加油咯。这个题又属于犯了低级错误!
1773 Problem D: 整数的封装
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 5096 Solved: 1979
Description
现在,请编写一个Integer类,将整数封装起来。目前,只需要你来实现最基本的功能:
1、 具有2个构造函数:
(1)Integer::Integer(int):根据参数构建一个整数对象。
(2)Integer::Integer(char*, int):根据给定的字符串和进制来构建一个整数对象。
2.、具有一个int Integer::getValue()方法,用于返回Integer类中所封装的整数的具体数值。
Input
输入分为多行。
第一行是一个正整数M,表示其后面的M行为M个整数,每行一个整数。
第M+2行是一个正整数N,表示其后有N行。每行由利用一个空格隔开的2部分组成:前半部分是一个字符串,后半部分是该字符串所使用的进制。
注意:
-
所有的输入,均在int类型的表示范围内,且所有的输入均为合法输入。
-
利用0 ~ 9和a ~ z可最大可以表示36进制的数值。(其实还有A ~ Z,不知道算不算出题不严谨= = )
Output
输出为M+N行,每行为一个十进制整数,且输出顺序应与输入顺序相同。
Sample Input
2
999
-1999
4
0111 2
1a 16
z 36
a 16
Sample Output
999
-1999
7
26
35
10
Wrong Answer50%:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class Integer {
public:
Integer(int data) {
dd = data;
}
Integer(char* str, int r) {
strr = str;
t = 1;
dd = 0;
for(i = (strlen(strr) - 1); i >= 0; i--) {
if((int) strr[i] >= 48 && (int) strr[i] <= 57)
dd += ((int) strr[i] - 48) * t;
else if((int) strr[i] >= 65 && (int) strr[i] <= 90)
dd += ((int) strr[i] - 55) * t;
else if((int) strr[i] >= 97 && (int) strr[i] <= 122)
dd += ((int) strr[i] - 87) * t;
t = t * r;
}
}
int getValue() {
return dd;
}
private:
int dd, t, i;
char *strr;
};
int main()
{
char str[100];
int numOfData, numOfStr;
int data, i, radix;
cin>>numOfData;
for (i = 0; i < numOfData; i++){
cin>>data;
Integer anInteger(data);
cout<<anInteger.getValue()<<endl;
}
cin>>numOfStr;
for (i = 0; i < numOfStr; i++){
cin>>str>>radix;
Integer anInteger(str,radix);
cout<<anInteger.getValue()<<endl;
}
return 0;
}
害,想了半天没想到(其实很自信的,直接就找正确代码参考去了)
然后注意到 ‘-’ (负号)这个东西!!!!!!!
好吧,又是粗心马虎大意了!!!
所以,改完就Accepted:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class Integer {
public:
Integer(int data) {
dd = data;
}
Integer(char* str, int r) {
strr = str;
t = 1;
dd = 0;
for(i = (strlen(strr) - 1); i >= 0; i--) {
if((int) strr[i] >= 48 && (int) strr[i] <= 57)
dd += ((int) strr[i] - 48) * t;
else if((int) strr[i] >= 65 && (int) strr[i] <= 90)
dd += ((int) strr[i] - 55) * t;
else if((int) strr[i] >= 97 && (int) strr[i] <= 122)
dd += ((int) strr[i] - 87) * t;
t = t * r;
}
if(strr[0] == '-')
dd = -dd;
}
int getValue() {
return dd;
}
private:
int dd, t, i;
char *strr;
};
int main()
{
char str[100];
int numOfData, numOfStr;
int data, i, radix;
cin>>numOfData;
for (i = 0; i < numOfData; i++){
cin>>data;
Integer anInteger(data);
cout<<anInteger.getValue()<<endl;
}
cin>>numOfStr;
for (i = 0; i < numOfStr; i++){
cin>>str>>radix;
Integer anInteger(str,radix);
cout<<anInteger.getValue()<<endl;
}
return 0;
}
害,低级错误要不得啊,永远别忘记负数!!!!!!!!!