2 jasonnocliu jasonnocliu 于 2013.06.24 22:18 提问

C语言求教,进制转换代码

请大家帮我看看我的程序有什么错误,感激不尽!

/*
num:数字  i:进制数   k:总位数 
*/
#include"stdio.h"
#include"math.h"
int firsttext(int num,int i){
    int k;
for(k=1;;k++){
              if(num<((int)pow((float)i,(float)k)))
              break;
              }
              --k;
              return k;
              }
int printoutevery(int num,int i,int k){
    int a;
    if(k=0)
    {return 0;}
    for(a=1;;a++){
                  if(num<((int)pow((float)i,(float)k)))
                  break;
                  }
    a--;k--;
    num-=(int)pow((float)i,(float)a);
    if(a<10)
    printf("%d",a);
    else printf("%c",a+55);
    printoutevery(num,i,k);
}
int main(){
    int num,i,k;
    printf("请输入待处理数(十进制):");
    scanf("%d",&num);
    printf("请输入您要转换的进制:");
    scanf("%d",&i);
    k=firsttext(num,i);
    printoutevery(num,i,k);
    getchar();
    return 0;
}

6个回答

haolong8986
haolong8986   2013.06.26 21:48
已采纳
int printoutevery(int num,int i,int k){
    int a;
    if(k<0)
    {return 0;}
    //for(a=1;;a++){
    //  if(num<((int)pow((float)i,(float)a)))
    //      break;
    //}

    a = num / (int)pow((float)i,(float)k);
    num -= a * (int)pow((float)i,(float)k);
    k--;
    if(a<10)
        printf("%d",a);
    else printf("%c",a+55);
    printoutevery(num,i,k);
}
suannai0314
suannai0314 帮你编辑了下代码部分的格式,更多markdown使用见http://ask.csdn.net/pages/markdown
4 年多之前 回复
u010228218
u010228218   2013.06.25 00:29

你代码没错
运行会出现这样错误“ ,Error spawning cl.exe”错误提示。这个问题很多情况下是由于路径设置的问题引起的, “CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录/VC98/Bin”下面, 你可以到相应的路径下找到这个应用程序。
:最简便的方法: 启动VC时不要用图形界面,通过在命令提示符下输入:Msdev /useenv运行(注意啦/前面有个空格).它会强制使系统环境变量全高设置成正确值.而且,只需要使用一次这样的方式运行VC,以后再次通过双击图标的方式启动也不会有问题.

u010228218
u010228218   2013.06.25 00:31

建议把
#include"stdio.h"
#include"math.h"
改成
#include
#include

u011197803
u011197803   2013.06.25 01:09

建议把
#include"stdio.h"
#include"math.h"
改成
#include
#include

xyq358
xyq358   2013.07.10 19:07

/*
num:数字 i:进制数 k:总位数
*/
#include "stdio.h"
#include "math.h"
int firsttext(int num,int i)
{
int k;
for(k=1;;k++)
{
if(num<((int)pow((float)i,(float)k))) //i的k次方
break;
}
//--k;
return k;
}
int printoutevery(int num,int i,int k)
{
int a;
if(0==k) //注意此处的写法
{
return 0;}
a = num / (int)pow((float)i,(float)(k-1));
num -= a * (int)pow((float)i,(float)(k-1));
k--;
if(a<10)
printf("%d",a);
else
printf("%c",a+55);
printoutevery(num,i,k);
}
int main()
{
int num,i,k;
printf("Please input num at decimal notation:\n");
scanf("%d",&num);
printf("Please input scale you want to convert:\n");
scanf("%d",&i);
k=firsttext(num,i);
printoutevery(num,i,k);
getchar();
return 0;
}

a1193561652
a1193561652   Rxr 2015.05.19 16:26

k是进制转换之后的数的位数吗?如果是那么k的值算错了,不需要--k。
另外递归求各个位的数值的部分好像逻辑就不对,不知道你用的是什么原理,不过进制转换通常是循环取余数输出的方法。
还有些小问题,比如printoutevery()函数的第一个if()里的判断应该是“==”

Csdn user default icon
上传中...
上传图片
插入图片