南邮OJ 1012进制转换

题目描述:   进制转换问题

题目链接:  http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1012

#include <iostream>
using namespace std;
int main()
{
<span style="white-space:pre">	</span>int n;
	int b[1000];
	cin >> n;
	int a[1000][2] = {};
	for (int i = 0; i < n; i++)
	{
		cin >> a[i][0] >> a[i][1];
	}
	int A,B;
	for (int j = 0; j < n; j++)
	{
	    int y =0;
	    A = abs(a[j][0]);
	    while (A >= a[j][1])
	    {	
		B = A % a[j][1];  
		switch (B)
		{
		 case 10: B = 'A';break;
		 case 11: B = 'B';break;
<span style="white-space:pre">		</span> case 12: B = 'C';break;
		 case 13: B = 'D';break;
		 case 14: B = 'E';break;
		 case 15: B = 'F';break;
		 default: break;
		}
		b[y] = B;
		A = A / a[j][1];
		y++;
	    }
	    if (a[j][0] < 0)
	    {
		b[y] = A;
		b[y+1] = '-';
		for (int k = y+1; k >= 0; k--)
	        {
		    if (b[k]<= 70 && b[k]>=65 || b[k] == 45)
	               {
		       cout << (char)b[k];
		       continue;
		     }
			cout << b[k];
		   }
		}
		else
		{
		     b[y] = A;
<span style="white-space:pre">		</span>for (int k = y; k >= 0; k--)
		     {
			 if (b[k]<= 70 && b[k]>=65)
			{
		          cout << (char)b[k];
			  continue;
		      }
		       cout << b[k];
		   }
		}	
	    cout << endl;
	}
	return 0;
}
本题几个点:

1,由于基础不够扎实,搞得二维数组的声明都模糊了,之前也是调试了一会儿, a[n][m] 即为表示n行m列数组。

2,本题主要思想,短除法的应用。

3,对于A,B,C,D,E,F这几个输出得要好好考虑,怎么产生以及怎么输出,数组中只能储存同一类型的元素,故在输出时要做出判断并进行类型转换。

4,对于负数,再次另外考虑,尤其是负号的输出!

你可能感兴趣的:(数制转换,南邮OJ)