C编程练笔-对一个数,求出它N进制对应的值

这是一个使用C语言编写的程序,能够将一个无符号整数转换成2到16之间的任意进制表示。程序通过读取用户输入的数值和目标进制,利用取余和除法操作将数值存入数组,然后逆序输出转换后的结果。程序中还包含一个未解的疑问,关于do-while循环和for循环在计算余数存入数组时的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:将一个无符号整数转换成为任意进制(2到16之间)

思路:用数组完成

定义数组及其它。

由键盘输入所要转换的整数 num ;然后输入权 sig (2<= sig <= 16),不在此范围重新来,由do-while控制。

然后将取的余数存入数组中。

从数组倒着打印出最后答案。

有很多不完善的地方,希望可以改进!希望早点把指针掌握!

编绎软件:vc++6.0

程序:

#include <stdio.h>
#include <conio.h>

void main()
{
 int temp[100]; //定义数组
 int num,sig,i=0,k; //num为要求的整数,sig为权

 printf("Please input the num you want to translate: ");
 scanf("%d",&num);
 do
 {
  printf("please input significance between 2 and 16: ");
  scanf("%d",&sig);
  printf("/nYou input the significance: %d/n/n",sig);
 }while(sig<2 || sig>16); //控制权在2-16之间

 k=num; //将num赋给k,下面的模以k计算

 do
 {
  temp[i++]=k%sig;
  k = k/sig;
 }while(k != 0); //将k对权取余,存入数组


 printf("%d(%d)= ",num,sig);
 do
 {
  if(temp[i-1]<10)
  {
   printf("%d",temp[i-1]);
  }
  else if(temp[i-1]>=10)
  {
   if(temp[i-1] == 10) printf("A");
   else if(temp[i-1] == 11) printf("B");
   else if(temp[i-1] == 12) printf("C");
   else if(temp[i-1] == 13) printf("D");
   else if(temp[i-1] == 14) printf("E");
   else if(temp[i-1] == 15) printf("F");
  }  
  i--;
 }while(i>0); //倒着输入出数组,如果>10,则输出字母

 printf("/n");
 getch();
}


其它这段程序:

do
 {
  temp[i++]=k%sig;
  k = k/sig;
 }while(k != 0);
//将k对权取余,存入数组

为什么不能改成:

 for(k=num;k<sig;k/=sig)
 {
  temp[i++]=k%sig;
 }

百思不得其解!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值