| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5031 人关注过本帖
标题:任意进制数之间的转换
只看楼主 加入收藏
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 10楼 自学的数学
没意义 就算都加了又如何
还有1000进制 1000000000000进制

https://zh.
2018-05-19 23:38
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 11楼 lin5161678
这只是为了说明一个道理,就可以了。并不一定要写到好多为止。有这种思路就行。
2018-05-19 23:45
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 12楼 自学的数学
不不不 说反了
对于进制转换
要了解的道理是
其他进制转换成十进制
还有十进制转换为其他进制
至于是36进制还是52进制
反而是次要的

https://zh.
2018-05-20 00:29
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 12楼 自学的数学
真的去考虑100进制的话
需要注意ASCII才90+个可显示字符
比如\n \0 就不能用
\0 用了字符串就被截断了

所以 对于100进制 已经不能用字符串表示了
需要自己定义一个类来用
这坑就很大了

就算不考虑字符串能不能用的问题
当一个数字写出来是 #(4*@
我觉得我会掀桌子

https://zh.
2018-05-20 00:38
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 14楼 lin5161678
对于你的问题,我用12楼的话来回答你,另外再加一句:编程是思想,
不是任务。有那个意思就行了。不一定要弄到100啊。
2018-05-20 06:20
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 15楼 自学的数学
你也说了 编程是思想
进制转换的思想
不就是转换到十进制
然后十进制转换其他进制么
至于是36进制还是52进制
不过是多摆几个字符
换一个参数而已

https://zh.
2018-05-20 11:06
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 16楼 lin5161678
你的思路是:
进制数A<>进制数10<>进制数B
你把进制数10作为了中间桥梁,能不能这样考虑:
需要转换的进制数    转换后的进制数
2进制数            2进制数
3进制数            3进制数
4进制数            4进制数
5进制数            5进制数
6进制数            6进制数
7进制数            7进制数
8进制数            8进制数
9进制数            9进制数
10进制数           10进制数
11进制数           11进制数
12进制数           12进制数
。。。            。。。
直接从左边的进制数转换到右边的进制数(同进制数除外),中间不用别的进制数做桥梁起渡过的作用。
2018-05-20 11:19
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 17楼 自学的数学
不行
然后我可以解释一下 为什么不行
因为 */% 这三个操作是基于十进制
依赖这三个操作才实现把 十进制转换为其他进制

同样道理 得有一套基于二进制的 */% 才能把二进制转换为其他进制
同样道理 得有一套基于三进制的 */% 才能把三进制转换为其他进制
.
.
.

当然可以自己实现 */% 但是要注意
需要对每一个进制实现一套 */%
这工作量大且没有意义
指定一个中间进制就能处理好的事情

https://zh.
2018-05-20 11:45
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 18楼 lin5161678
    你说的不行,我理解,我不反对,同时也反对;理由如下:
    我对程序的理解是:程序分两步走:
    1:编写程序。
    2:使用程序。
  第一步是为第二步服务的,在编写程序时,你说的用十进制作为渡过的桥梁是必须的,我在没找到不用它作为桥梁时,我支持你的观念,但是这只是限定于编写程序的范围内。在第二步里,程序的使用过程中,我们(指的是使用程序的人)只关心的是进制A如何转换为进制B的数,至于它是如何转换的,或者你的程序编写了好多行(甚至1000行或者10000行),都不是我们关心的问题,我们只关心我输入一个数进去,能立马得出我想要的结果就可以了。请看:
程序代码:
#include<iostream>   
#include<math.h>   
#include<string.h>  
using namespace std;    
int main()    
//任意进制转换为10进制  
{  char q[100];//定义q为字符串保存原数  
   long n=0;//定义转换成的十进制数为n  
   int i,l,r=0,p,c,m=0,s[100];  
//i为原进制数,l为字符串长度,r为次方数,p为转换后的任意进制数,c为余数,m,l用于计数,s存入转换后的数组  
   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)//数制转换,结果存入数组s[m]    
   {  c=n%p;    
      n=n/p;    
      m++;  
      s[m]=c;   //将余数按顺序存入数组s[m]中     
    }      
   for(int k=m;k>=1;k--)//输出转换后的序列    
      {    
         if(s[k]>=10) //若为十六进制等则输出相对应的字母    
            cout<<(char)(s[k]+55);    
         else         //否则直接输出数字    
            cout<<s[k];  
      }   
   cout<<endl;  
   return 0;
   } 

你说用这段代码能反驳你吗??如果能反驳,是反驳你的第一点呢,还是亮点都反驳呢??
2018-05-21 10:29
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用自学的数学在2018-5-21 10:29:44的发言:

    你说的不行,我理解,我不反对,同时也反对;理由如下:
    我对程序的理解是:程序分两步走:
    1:编写程序。
    2:使用程序。
  第一步是为第二步服务的,在编写程序时,你说的用十进制作为渡过的桥梁是必须的,我在没找到不用它作为桥梁时,我支持你的观念,但是这只是限定于编写程序的范围内。在第二步里,程序的使用过程中,我们(指的是使用程序的人)只关心的是进制A如何转换为进制B的数,至于它是如何转换的,或者你的程序编写了好多行(甚至1000行或者10000行),都不是我们关心的问题,我们只关心我输入一个数进去,能立马得出我想要的结果就可以了。请看:
#include<iostream>   
#include<math.h>   
#include<string.h>  
using namespace std;   
int main()   
//任意进制转换为10进制  
{  char q[100];//定义q为字符串保存原数  
   long n=0;//定义转换成的十进制数为n  
   int i,l,r=0,p,c,m=0,s[100];  
//i为原进制数,l为字符串长度,r为次方数,p为转换后的任意进制数,c为余数,m,l用于计数,s存入转换后的数组  
   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)//数制转换,结果存入数组s[m]   
   {  c=n%p;   
      n=n/p;   
      m++;  
      s[m]=c;   //将余数按顺序存入数组s[m]中     
    }      
   for(int k=m;k>=1;k--)//输出转换后的序列   
      {   
         if(s[k]>=10) //若为十六进制等则输出相对应的字母   
            cout<<(char)(s[k]+55);   
         else         //否则直接输出数字   
            cout<<s[k];  
      }   
   cout<<endl;  
   return 0;
   }
你说用这段代码能反驳你吗??如果能反驳,是反驳你的第一点呢,还是亮点都反驳呢??

不知道你所谓的反驳是什么
你这段代码的思路 和 我的描述是一致的
源进制 --> 十进制
十进制 --> 目标进制
你是不是对反驳这个词的理解有什么偏差??

至于你说使用??
等等 你前面不是在讨论编程的思想么
现在突然变成使用了?
好吧 使用者不关心 是否使用中间进制
只需要完成 输入数据 得到结果
所以呢? 和我说的东西有矛盾吗?
和我写的代码有矛盾吗?
程序代码:
#include <stdio.h>

int ToDecimal(const char* strSrc, long nSrcNum)
{
    int nRes = 0;
    char arrValue[127] = "";
    for(int i=0; i<10; ++i)
        arrValue[i + '0'] = i;
    for(int i=0; i<26; ++i)
        arrValue[i + 'A'] = i + 10;
        
    for(int i=0; strSrc[i]; ++i)
    {
        nRes = nRes * nSrcNum + arrValue[strSrc[i]];
    }
    return nRes;
}

void ReverseStr(char* str, int nLen)
{
    int i=0;
    while(i < nLen)
    {
        char tmp = str[i];
        str[i] = str[nLen];
        str[nLen] = tmp;
        ++i;
        --nLen;
    }
}

void Conversion(const char* strSrc, char* strDest, long nSrcNum, long nDestNum)
{
    const char* strBase = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int nSrc = ToDecimal(strSrc, nSrcNum);
    int nIndex = 0;
    while(nSrc)
    {
        strDest[nIndex++] = strBase[nSrc % nDestNum];
        nSrc /= nDestNum;
    }
    strDest[nIndex] = 0;
    ReverseStr(strDest, nIndex-1);
}

int main(int argc, char *argv[])
{
    char str[50];
    Conversion("171", str, 10, 36);
    puts(str);
    return 0;
}


没看出什么矛盾啊
所以 你在反驳啥?
这样吧
你把我的观点贴一下 然后把反驳贴一下
一一对照
不然我很难理解你在说什么
在我看来 你贴的代码是在赞同我的观点
而你的说明 却是在反驳我?

https://zh.
2018-05-21 10:59
快速回复:任意进制数之间的转换
数据加载中...
 
   



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

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