智慧树要枯了 2016-04-01 03:19 采纳率: 37.5%
浏览 1258
已采纳

输入为“任意进制+数值”,想输出十进制下该数的数值,但怎么也输出不对,求解答!

int main()
{
int i=0,j,k,s=0,d=0,n=0;
int q=1;
int a,b;
char str1[100];
char str2[100];
int num[100];
cin>>i;
gets(str1);
k=strlen(str1)-2;

while(k>=0)
{  
  a=getnum(str1[k]);
  a=a*q;
  s=s+a;
  q=q*i;
  k--;
 }
cout<<s<<endl;
//其中getnum()函数是我自己写的,功能是将字符型转化为int型,这个函数我测试过,没问题。例如‘a’->10,  'z'->35
//进制数为整型,数值为字符串(‘0’~‘9’表示0~9,‘a’~'z'表示10~35),进制数输入范围为2~35
  • 写回答

1条回答

  • 小灸舞 2016-04-01 04:52
    关注

    有两个问题:
    1.没有情况输入缓冲区
    2.k=strlen(str1)-1才对,strlen是不计算'\0'的
    我在代码里注释了以下两处

     #include<iostream>
    using namespace std;
    int getnum(char ch)
    {
        int c = ch;
        if(ch >= 'a')
            return c - 87;
        else if(ch >= 'A')
            return c - 55;
        else
            return c - 48;
    }
    
    void main(int argc, char* argv[])
    {
        int i=0,j,k,s=0,d=0,n=0;
        int q=1;
        int a,b;
        char str1[100];
        char str2[100];
        int num[100];
        cin>>i;
        fflush(stdin);//这里需要清空输入缓冲区,不然gets会直接读取遗留下来的回车
        gets(str1);
        k=strlen(str1)-1;//这里应该减1啊,为啥要减2?
        while(k>=0)
        {  
            a=getnum(str1[k]);
            a=a*q;
            s=s+a;
            q=q*i;
            k--;
        }
        cout << s << endl;
        system("pause");
    }
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?