【PAT-B1022】 D进制的A+B (20 分)(c++)
【出现问题】
第三个测试点出现问题:
//进制转化核心代码
while (c > 0)
{
int temp = 0;
temp = c % num;
cout << c % num << endl;
arr.push_back(temp);
c = c / num;
}
在此代码下出现的问题:
【分析】
在本地编译器上进行实验,选择最特殊的值:a=0,b=0,无结果,由此:结合代码可以看出来式while循环结构出现了问题,当c=0时,不进入循环体内部!,那么我们就争对此问题可以在平台进行提交试试:
if(c == 0)
{
cout << 0;
}
可以看出来三号测试点显示正确:
当然我们也可以使用do while这种循环结构!
【代码】
使用do-while结构
#include<iostream>
#include<vector>
using namespace std;
void test01()
{
vector<int> arr;
int a = 0;
int b = 0;
int c = 0;
int num = 0;
cin >> a;
cin >> b;
cin >> num;
c = a + b;
do{
int temp = 0;
temp = c % num;
//cout << c % num << endl;
arr.push_back(temp);
c = c / num;
}while (c > 0);
//cout << "..." << endl;
for (int i = arr.size() - 1; i >= 0; i--)
{
cout << arr[i];
}
/*cout << c / num;
cout << endl;
cout << c % num;
cout << endl;
cout << c / num % num;*/
}
int main()
{
test01();
cout << endl;
return 0;
}
特殊值特殊处理
#include<iostream>
#include<vector>
using namespace std;
void test01()
{
vector<int> arr;
int a = 0;
int b = 0;
int c = 0;
int num = 0;
cin >> a;
cin >> b;
cin >> num;
c = a + b;
while (c > 0){
int temp = 0;
temp = c % num;
//cout << c % num << endl;
arr.push_back(temp);
c = c / num;
}
//cout << "..." << endl;
for (int i = arr.size() - 1; i >= 0; i--)
{
cout << arr[i];
}
if(a == 0 && b ==0)
{
cout << 0;
}
/*cout << c / num;
cout << endl;
cout << c % num;
cout << endl;
cout << c / num % num;*/
}
int main()
{
test01();
cout << endl;
return 0;
}