下面程序的功能是将十进制正整数num转换成n进制,并输出。

我的代码是:
#include
using namespace std;
int main()
{
int num, n, i=0, j, a[20];
cout<<"输入要转换的十进制整数:";
cin>>num;
cout<<"输入要转换的进制:";
cin>>n;
do
{
i++;
a[i]=num%n;
num=num/n;

}while(num!=0);
for(j=i;j>=0;j--)cout<<a[j];

cout<<endl;
return 0;
}
为什么输出的前几位是正确答案,后面总是有4253504呢

因为后面的没有赋值,所以是随机值

#include <stdio.h>
#include <math.h>
int main()
{
int n,r,i,t,b;
char a[100];
char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //a数组用储存转后每位的数字,//c用来代表超过9后每位的数字。 
scanf("%d%d",&n,&r);
t=n;
t=(int)fabs(t);
for(i=0;;i++)
{
 b=t%r;
 if(b>=10)
  a[i]=c[b-10];
 else
  a[i]=b+'0';
 t=(t-b)/r;
 if(t==0)
  break;}
if(n<0)
printf("-");
for(;i>=0;i--)
printf("%c",a[i]);
printf("\n");
return 0; }

因为你那个后面的for(;i>=0;i--)这里的a[0]没有赋值,局部变量是随机数,而全局是0所以就输出随机数
我用函数实现,其实就是个倒叙输出

#include<bits/stdc++.h>
using namespace std;
char c[100]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int n,k;
void print(int x){
    if(!x)return;
    print(x/k);
    printf("%c",c[x%k]);
    return;
}
int main(){
    cin>>n;
    cin>>k;
    print(n);
    return 0;
}