标题:C语言进制转换
只看楼主
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
结帖率:88.89%
已结贴  问题点数:20 回复次数:10 
C语言进制转换

键盘输入任一个大于等于0的整数,输出R进制表示的字符串
【样例输入1】
  29 2  
【样例输出1】
  11101
【样例输入】
  29 16  
【样例输出】
  1D

-----------------------------------我写出来的代码运行结果总是方块, ,有没有人知道原因啊?----------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,count=0,n,m,shang=1;
    char A[1000],yu;
    scanf("%d %d",&n,&m);
    while(n)
    {
        shang = n;
        n = n/m;
        yu = shang%m;
        if(yu>9 && yu<16)
            yu = yu-10+'A';
        A[count++] = yu;
    }
    A[count+1] = '\0';
    for(i=count-1;i>=0;i--)
        printf("%c",A[i]);

    return 0;
}
搜索更多相关主题的帖子: C语言 count 输出 进制转 输入 
2020-04-08 17:42
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
        if(yu>9 && yu<16)
            yu = yu-10+'A';
大于9 有处理
小于9 怎么办?

https://zh.
2020-04-08 17:52
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:6 
程序代码:
#include <stdio.h>

void foo(int n, int base)
{
    if(n)
    {
        foo(n/base, base);
        putchar("0123456789ABCDEF"[n%base]);
    }
}

int main(int argc, char *argv[])
{
    int n, m;
    scanf("%d%d", &n, &m);
    foo(n, m);
    puts("");
    return 0;
}

https://zh.
2020-04-08 17:58
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
得分:0 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,count=0,n,m;
    int A[1000],yu;
    scanf("%d %d",&n,&m);
    while(n)
    {
        yu = n%m;
        n = n/m;
        A[count++] = yu;
    }
       for(i=count-1;i>=0;i--)
        printf("%d",A[i]);
        return 0;
}
2020-04-08 18:29
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 
回复 2楼 lin5161678
小于9的话 就直接加入A呀

今天再晚也是早,明天再早也是晚
2020-04-08 18:44
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用邹峰研在2020-4-8 18:44:48的发言:

小于9的话 就直接加入A呀

直接加入就错了呗
你得 + '0'

https://zh.
2020-04-08 18:50
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 4楼 飞天大烧卖
这段代码无法处理 超过十进制的情况
比如样例里面的
29 16

https://zh.
2020-04-08 18:52
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
得分:6 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,count=0,n,m;
    int A[1000],yu;
    char b[1000];
    scanf("%d %d",&n,&m);
    if(m<=10)//加判断来处理16进制数据
    {
    while(n)
    {
        yu = n%m;//取余数
        n = n/m;//取商
        A[count++] = yu;//存到数组里
    }
       for(i=count-1;i>=0;i--)//遍历数组
        printf("%d",A[i]);
        return 0;
    }
    else
    {
        while(n)
        {
        yu=n%m;
        n=n/m;
        if(yu>=10)
        b[count++]=yu+55;
        else
        b[count++]=yu+48;
        }
         for(i=count-1;i>=0;i--)//遍历数组
          printf("%c",b[i]);
          return 0;
    }
}

2020-04-08 20:15
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:8 
程序代码:
#include<iostream>   
#include<math.h>   
#include<string.h>  
using namespace std;    
int main()    

{  char q[100];  
   long n=0; 
   int i,l,r=0,p,c,m=0,s[100];  

   cout<<"输入要转化的数:"<<endl;  
   cin>>q;  
   cout<<"输入原数进制:"<<endl;  
   cin>>i;  
   cout<<"转换后的进制:"<<endl;  
   cin>>p;  
   l=strlen(q);  
   strupr(q);
   for(l=l-1;l>=0;l--)  
      {if(q[l]<='9')n=n+(q[l]-48)*pow(i,r++);  
          else n=n+(q[l]-55)*pow(i,r++);}  

   while(n!=0)
   {  c=n%p;    
      n=n/p;    
      m++;  
      s[m]=c;   
   for(int k=m;k>=1;k--)
      {    
         if(s[k]>=10)   
            cout<<(char)(s[k]+55);    
         else        
            cout<<s[k];  
      }   
   cout<<endl;  
   return 0;
   } 
}
2020-04-08 21:09
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:0 

我也补写了一个,算是提供思路吧,谢谢各位了!

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,x,count=0,n,m,shang=1;
    char A[1000],yu,B[]={'A','B','C','D','E','F','\0'};

    scanf("%d %d",&n,&m);
    if(n==0)
    {
        printf("%d",n);
        return 0;
    }
    else
    {
        while(n)
        {
            shang = n;
            n = n/m;
            yu = shang%m;
            if(yu>9 && yu<16)
                yu = yu-10+'A';
            A[count++] = yu;
        }
        A[count+1] = '\0';
        for(i=count-1;i>=0;i--)
        {
            if(A[i]-65>=0)
            {
                x = A[i]-65;
                printf("%c",B[x]);
            }
            else
                printf("%d",A[i]);
        }
    }


    return 0;
}

今天再晚也是早,明天再早也是晚
2020-04-08 21:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500945-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135681 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved