2 qq 20254167 qq_20254167 于 2016.04.01 11:19 提问

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

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个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.01 12: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");
}

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!