输入一个十进制数N,将它转换成R进制数输出。
7 2 23 12 -4 3
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在进行下此次计算诗,有可能保留上一次的负值,从而造成多输出一个负号