c语言辗转相除法 将十进制转换成任意进制的数 运行结果出错,与正确不符,求指导哪里出错

#include<stdio.h>voidmain(){inti=0,base,num[32];longintn;charc;printf("Inputnum:");sc... #include<stdio.h>
void main()
{
int i=0,base,num[32];
long int n; char c;
printf("Input num:");
scanf("%ld",&n);
printf("Input base:");
scanf("%d",&base);

for(;i<=32;i++)
{
num[31-i]=n%base;
n=n/base;
if(num[31-i]<10)
printf("%d", num[31-i]);
else
{
c=num[31-i]+87;
printf("%c",c);
}
if(num[31-i]<base)
break;
}
}
展开
 我来答
倾城不及你笑颜Ee
2012-04-22 · 超过11用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:26.4万
展开全部
for循环数组越界算小问题
我觉得至少跳出循环的条件有点问题
比如我num是1253,转换为16进制时 应该是4E5;
那么运行时num[31]=1253%16=5;
78=1253/16
输出一个5
然后判断num[31]<base
就直接跳出循环了
还有你输出没有逆序输出吧,好像不是辗转相除法吧,是除k取余法吧。
其它的细节。。。可能还要调试下
洗洗睡了
追问
数组越界那个我提问后就想改了
的确是除k取余,因为辗转相除不知道怎么转换进制
逆序输出的确忘记了
关键是多谢提醒那个判断的错误,的确是这样啊,改成n==0就好啦,谢啦,这个问题困扰我很久了
xoalyg
2012-04-22 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2355万
展开全部
/*
Input number : 56
Input base(2 <= base <= 36): 8
转换为8进制数是 : 70
Press any key to continue
*/
#include<stdio.h>
void main() {
int i = 0,j,t,base;
long int n;
char c,s[32];
printf("Input number : ");
scanf("%ld",&n);
printf("Input base(2 <= base <= 36): ");
scanf("%d",&base);
while(n) {
t = n % base;
if(t > 9) s[i] = 'A' + t - 10;
else s[i] = '0' + t;
n /= base;
i++;
}
s[i] = '\0';
for(j = 0; j < i / 2; ++j) {
c = s[j];
s[j] = s[i - 1 - j];
s[i - 1 - j] = c;
}
printf("转换为%d进制数是 : %s\n",base,s);
}
追问
%s是什么?
这个程序的确可用,可是我想问我的程序哪里有问题
追答
说心里话,我对你的算法没搞清楚,所以不知道什么叫错还是对!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
看淡放下随缘
2012-04-22
知道答主
回答量:17
采纳率:0%
帮助的人:11.9万
展开全部
void main()
{
int i=0,base,num[32];
long int n; char c;

上面输入了一个 long int n;
当然不行喽,要把int去掉,怎么能同时输两种类型嘛。
追问
long int 是长整形啊,怎么是两种类型,错根本不在那
追答
long长整型,int是短整型,两种类型怎么可以同时出现呢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式