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.没有情况输入缓冲区
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");
}