因为接手的项目是用C++写的,里面图形化界面涉及到QT所以专门从图书馆借了本《QT图形界面编程入门》,第一二章都没正式设计QT,复习了下对象,类,继承和多态之类的C++面对对象编程的重要内容,之前没有学过C++,但是学过C和java,所以一方面当学习新内容,另一方面也当时复习了。在第一章里面的习题5,可能你会觉得这是一道很简单的题目,但是确实足足让我写了一个半小时。最终终于还是写出来了,但是效率不高,还是有点拼凑的感觉。
题目如下:
最初的问题在于:用指针遍历char类型的数组,而我纠结的点在于不知道数组大小怎么用指针遍历呢,这个问题显然很蠢,直接用'\0'判断就行了;后来我还是决定记录下这个问题是因为我花了大量的时间却写出来一段效率及其不高的代码,望指点。代码如下:
class BigInt
{
private:
int dat[200];
int len;
public:
//接受外部输入放入整形数组(作为字符输入,再将每一位转换成整数)
void input(char* d);
//将另一个对象other中的数据加到当前对象上
void Add(BigInt &other);
};
void BigInt::input(char* d)
{
//开始的时候想用迭代器遍历数组,但是d.begin()处会报错表达式必须包含类型,几番尝试还是放弃了
//vector<char>::iterator iter;
//for (iter = d.begin(); iter != d.end(); iter++)
//{
// cout << *iter << '\0';
//}
int num = atoi(d);
int temp[200];
int idex = 0;
while (num != 0)
{
temp[idex] = num % 10;
num /= 10;
idex++;
}
int j = idex - 1;;
for (int i = 0; i < idex; i++)
{
dat[j] = temp[i];
j--;
}
len = idex;
}
void BigInt::Add(BigInt &other)
{
int sum1 = 0;
for (int i = 0; i < len; i++)
{
sum1 += dat[i] * pow(10, (len - i - 1));
}
int sum2 = 0;
for (int i = 0; i < other.len; i++)
{
sum2 += other.dat[i] * pow(10, (other.len - i - 1));
}
int sum = sum1 + sum2;
int temp[200];
int idex = 0;
while (sum != 0)
{
temp[idex] = sum % 10;
sum /= 10;
idex++;
}
int j = idex - 1;;
for (int i = 0; i < idex; i++)
{
dat[j] = temp[i];
j--;
}
for (int i = 0; i < idex; i++)
{
cout << dat[i];
}
}
int main()
{
BigInt c;
BigInt c1;
char cs[10] = "123456";
char cs1[10] = "100000";
c.input(cs);
c1.input(cs1);
c.Add(c1);
}