马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题请写一段程序将17进制数转换为10进制。
输入格式:
为一个只包含小写字母的字符串(其中a代表17进制的0,b代表17进制的1,以此类推直到q代表17进制的16),字符串以’\n’结束。
输出格式:
是一个整数,转换后的10进制数。测试用例保证合法,且转换后的整数可以用int存储。
输入样例:
caa
输出样例:
578
我的代码问题在哪#include<stdio.h>
#define AA 1024
int main()
{
int num1=0,num2,ii,pp;
char ch;
int aa[AA];
for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
{
if(ch = '\n')
{
break;
}
else
{
aa[num2] = int(ch) - 97;
}
}
for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
{
num1 = num1 + aa[pp]*(17^ii);
}
printf("%d",num1);
}
运行结果
caa
2465
在您的代码中有几个问题需要修正:
1. 在 if(ch = '\n')这一行,您使用了单个等号 =而不是相等比较运算符 ==。应该使用 if(ch == '\n')来判断换行符。
2. 在计算17进制转换为10进制的过程中,您使用了错误的运算符 ^。在C/C++中, ^是按位异或运算符,而不是求幂运算符。要计算17的幂次方,您可以使用 pow函数或者自己编写一个幂函数。
3. 在循环中,将 num2作为循环条件可能会导致数组越界。建议使用另外一个变量来记录字符串的长度,并将其作为循环条件。
根据上述修改,以下是修正后的代码: #include <stdio.h>#include <math.h>#define AA 1024int main() { int num1 = 0, num2, ii, pp; char ch; int aa[AA]; int length = 0; for (ch = getchar(), num2 = 0; num2 < AA; num2++) { if (ch == '\n') { break; } else { aa[num2] = ch - 'a'; length++; } ch = getchar(); } for (ii = 0, pp = length - 1; ii < length; ii++, pp--) { num1 += aa[pp] * pow(17, ii); } printf("%d", num1); return 0;}
这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!
|