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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言辗转相除法 将十进制转换成任意进制的数 运行结果出错,与正确不符,求指导哪里出错相关的知识,希望对你有一定的参考价值。

#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;

for循环数组越界算小问题
我觉得至少跳出循环的条件有点问题
比如我num是1253,转换为16进制时 应该是4E5;
那么运行时num[31]=1253%16=5;
78=1253/16
输出一个5
然后判断num[31]<base
就直接跳出循环了
还有你输出没有逆序输出吧,好像不是辗转相除法吧,是除k取余法吧。
其它的细节。。。可能还要调试下
洗洗睡了追问

数组越界那个我提问后就想改了
的确是除k取余,因为辗转相除不知道怎么转换进制
逆序输出的确忘记了
关键是多谢提醒那个判断的错误,的确是这样啊,改成n==0就好啦,谢啦,这个问题困扰我很久了

参考技术A /*
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是什么?
这个程序的确可用,可是我想问我的程序哪里有问题

追答

说心里话,我对你的算法没搞清楚,所以不知道什么叫错还是对!

参考技术B void main()

int i=0,base,num[32];
long int n; char c;

上面输入了一个 long int n;
当然不行喽,要把int去掉,怎么能同时输两种类型嘛。追问

long int 是长整形啊,怎么是两种类型,错根本不在那

追答

long长整型,int是短整型,两种类型怎么可以同时出现呢!

C语言编程题将十进制M转换成二进制

1.要用C语言
2.我的思路是:M%2取余,将所有的余数放入一个数组,然后在用递减循环把余数输出,满足转换。
我有思路但是写不出来,哪位受累帮我实现一下。非常感谢……

#include <stdio.h>
void main()

int a[32]=0,i;
long num;
i=0;
printf("请输入一个十进制数:");
scanf("%ld",&num);
printf("%ld的二进制数为:",num);
while(num>=1)

a[i]=num%2;
num=num/2;
i++;

for(i=i-1;i>=0;i--)

printf("%d",a[i]);

printf("\n");


这是我写的程序 要转八进制只需把这a[i]=num%2;num=num/2;两句改为a[i]=num%8;
num=num/8;
参考技术A 思路是对的,自己思考思考吧,用一个循环语句就可以了。 参考技术B void main()

long input;
for ( scanf ( "请输入正整数:\n%ld", &input ); input ;printf ( "%d", (input&0x80000000)!=0 ), input<<=1 );
参考技术C 用这个函数
void DisplayBits(unsigned value)

unsigned displayMask;
unsigned n;
int i;
n=sizeof(unsigned)*8;
displayMask=1<<(n-1);
for(i=0;i<n;i++)

putchar(value&displayMask?'1':'0');
displayMask=displayMask>>1;



就是通过位运算符

以上是关于c语言辗转相除法 将十进制转换成任意进制的数 运行结果出错,与正确不符,求指导哪里出错的主要内容,如果未能解决你的问题,请参考以下文章

C++编写一个程序,将用户输入的十进制整数转换成任意进制的数

c语言输入数字转换成2进制字符串原理

java的数制转换(详解,全!)

java的数制转换(详解,全!)

3. 从键盘上输入一个八进制数,利用指针将其转换为十进制数并输出 C语言 很急

任意十进制数转换成ASCII码C语言程序