输入一个十进制数N,将它转换成R进制数输出。
Input输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 Sample Input
7 2 23 12 -4 3
Sample Input
111 1B -11
代码如下:
#include <iostream> #include <stdio.h> #include <stack> using namespace std; int main() { int m,n; char arr[]="0123456789ABCDEF"; while (scanf ("%d %d",&m,&n)!=EOF) { stack<char>mystack; if(m<0) { printf("-"); m=-m; } if (m==0) { printf ("0\n"); continue; } while (m!=0) { mystack.push(arr[m%n]);//arr[m%n]对应上面的 "0123456789ABCDEF"; 保存余数入栈
m=m/n; } while (!mystack.empty()) { printf("%c",mystack.top()); //打印栈顶 mystack.pop(); //出栈 } cout<<endl; //换行 } return 0; }
以上代码为正确代码,
注意:(第一次写的代码)
#include <iostream> #include <stdio.h> #include <stack> using namespace std; int main() { int m,n,a; char arr[]="0123456789ABCDEF"; while (scanf ("%d %d",&m,&n)!=EOF) { stack<char>mystack; if(m<0) { a=m; //用a做标记 m=-m; } if (m==0) { printf ("0\n"); //continue; } while (m!=0) { mystack.push(arr[m%n]); m=m/n; } if(a<0) printf ("-"); while (!mystack.empty()) { printf("%c",mystack.top()); mystack.pop(); } cout<<endl; } return 0; }
此代码错在,a在进行下此次计算诗,有可能保留上一次的负值,从而造成多输出一个负号