C - 进制转化
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
输入十进制数n(0<=n<=10000),请输出它对应的k(2<=k<=36)进制数。
10,11…分别用A, B … 代替。
Input
本题有多组输入数据,你必须处理到EOF为止.
每组数据占一行,有2个整数n,k
Output
输出n对应的k进制数,一个数一行。
Sample Input
3 2 4 3 15 16
Sample Output
11 11 F
1.没让输出字符串,我错了;
2.num==0,我错了;
3.所以贴上,警示自己:
#include<stdio.h>
int main()
{
int a,n,i,j,c[10010],b;
while(~scanf("%d%d",&a,&b))
{
if(a==0)printf("0\n");
else
{i=0;
while(a)
{
c[i]=a%b;
a/=b;
i++;
}
for(j=i-1;j>=0;j--)
{
if(c[j]>=10)
printf("%c",c[j]-10+'A');
else
printf("%c",c[j]+'0');
}
printf("\n");
}
}
}
栈:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> z;
int num,jinzhi;
while(scanf("%d%d",&num,&jinzhi)!=EOF)
{
if(num==0)
printf("0\n");
else
while(num>0)
{
z.push(num%jinzhi);
num/=jinzhi;
}
while(!z.empty())
{
cout<<z.top();
z.pop();
}
printf("\n");
}
return 0;
}
#include<stack>
using namespace std;
int main()
{
stack<int> z;
int num,jinzhi;
while(scanf("%d%d",&num,&jinzhi)!=EOF)
{
if(num==0)
printf("0\n");
else
while(num>0)
{
z.push(num%jinzhi);
num/=jinzhi;
}
while(!z.empty())
{
cout<<z.top();
z.pop();
}
printf("\n");
}
return 0;
}